# Wahr/Falsch - Aussagen zu Java



## canyakan95 (2. Dez 2015)

ich soll folgende fragen beantworten mit richtig oder falsch ..wusste aber leider nicht die antwort.
eine lösung mit einer kleinen begründung wäre sehr nett.
danke

1)jede objektmethode besitzt this als impliziten parameter
2)jede klassenmethode besitzt this als impliziten parameter
3)in java ist der übergangsmechanismus für parameter primitiver datentypen "call by value" -Richtig  ?? 
4)call by reference bedeutet, dass beim aufruf der methode nicht der wert des aktuellen parameters auf den aufrufstapel gelegt wird, sonndern seine adresse - Richtig ??

In java
1)kann eine klasse mehrere subtypen? besitzen
2)kann eine klasse mehrere oberklassen besitzen  - Richtig
3)kann eine klasse maximal eine schnittstelle implementieren
4)kann eine klasse mehrer unterklassen besitzen


----------



## Xyz1 (2. Dez 2015)

ja
nein
ja
ja
ja
nein
nein
ja


----------



## InfectedBytes (3. Dez 2015)

Da du ja gerne noch ne kleine Begründung hättest:
1) Alle Instanzen einer Klasse teilen sich den Code der Methoden. Da die Methode jedoch wissen muss, auf welcher Instanz sie arbeiten soll, wird this als parameter mitgegeben.
2) Klassenmethoden arbeiten auf keiner Instanz, sondern direkt auf der Klasse. Dementsprechend kann es kein this geben.
3) Java nutzt nicht nur für primitive Typen CallByValue, sondern für alle. CallByValue bedeutet das beim Aufruf einer Methode der Inhalt der Variable in die aufgerufene Methode kopiert wird (Bei Objekten bedeutet das, dass die Referenz zum Objekt kopiert wird). Da man innerhalb der Methode nur auf einer Kopie arbeitet, kann man der Variable andere Werte zuweisen, ohne dass diese Änderung nach außen propagiert wird.
4) Bei CallByReference wird die Addresse übergeben. Dies führt dazu das Aufrufer und Aufgerufener auf _derselben _Variable arbeiten. Wenn der Wert also in der Methode geändert wird, ist diese Änderung natürlich auf beim Aufrufer sichtbar. (In Java gibt es natürlich überhaupt kein CallByReference)

Deine letzten vier Fragen beantworte ich mal zusammen in einem Abschnitt: 
In Java läuft die Vererbung so ab, dass eine Klasse _immer _von einer anderen Klasse erbt. Wenn man die Elternklasse nicht explizit angibt, so wird automatisch von der Klasse _Object _geerbt. (p.s. Object ist die einzige Klasse die keine Elternklasse hat)
So eine Einschränkung gilt natürlich nur für die Elternklasse. Umgekehrt gilt dies nicht, d.h. es können beliebig viele Klassen von einer Klasse erben. 
Anders wäre es auch nur bedingt sinnvoll^^
Die Vererbung ist halt eine "x ist ein(e) y" Relation. Also ein _Auto _ist ein _Fahrzeug_. Ein _Motorrad _ist ein _Fahrzeug_. Offensichtlich ist es halt gerade erwünscht, dass eine Klasse mehrere Unterklassen haben kann. 

Eine Klasse kann beliebig viele Interfaces implementieren. Bei Interfaces musst du natürlich beachten, dass diese nur Methoden Signaturen haben und keinen weiteren Inhalt (Ausnahme: Java8 default Methoden)


----------



## Xyz1 (3. Dez 2015)

InfectedBytes hat gesagt.:


> 4) Bei CallByReference wird die Addresse übergeben. Dies führt dazu das Aufrufer und Aufgerufener auf _derselben _Variable arbeiten. Wenn der Wert also in der Methode geändert wird, ist diese Änderung natürlich auf beim Aufrufer sichtbar. (In Java gibt es natürlich überhaupt kein CallByReference)



Hat bis zu einem gewissen Punkt aber denselben Effekt:, ein per Referenz-kopie übergebenes, nicht immutables Objekt kann geändert werden; nur eine Zuweisung an die Variable hätte für den Aufrufer/Umgebung keinen Effekt.


----------

