Hallo, ich habe hier ein Beispiel vom Buch Java ist auch eine Insel (S.507). Es geht um abstrakt Klassen und Methoden. Ich habe hier einen Code Teil, wo ich nicht verstehe warum ich zb in der Klasse Key meine Instanzvariable in der überschriebenen Methode nicht mit this.id referenziere und nur id schreibe? Und weshalb muss ich die Klasse Door casten? Und wieso brauche ich bei return false keinen else Fall?
Danke schon mal!
Java:
publicclassKeyextendsGameObject{//speicher ebenfalls eine idint id;publicKey(int id){this.id = id;}//überschreibe useOn//als erstes wird geprüft ob der Schlüssel//auf eine Türe angewedet wird//wenn ja, dann muss id key und id door übereinstimmen//wenn das alles war dann wird isOpen wahr//und die Methode liefert truepublicbooleanuseOn(GameObject object){if(object instanceofDoor){if(id ==((Door) object).id)return((Door) object).isOpen =true;}returnfalse;}}
Java:
publicclassDoorextendsGameObject{//eine tür hat für den Schlüssel eine id//den nicht jeder Schlüssel passt auf jedes Schlossint id;boolean isOpen;publicDoor(int id){this.id = id;}//die unterklasse door soll die abstrakte Methode useOn//überschreiben, aber immer false zurück gebe//da sich eine Tür in diesem Szenario//auf nichts anwenden lässstpublicbooleanuseOn(GameObject object){returnfalse;}}
Hallo, ich habe hier ein Beispiel vom Buch Java ist auch eine Insel (S.507). Es geht um abstrakt Klassen und Methoden. Ich habe hier einen Code Teil, wo ich nicht verstehe
this brauchst du nur zwingend, wenn es wie z.B. im Konstruktor eine lokale Variable oder einen Parameter gibt, der genauso wie das Feld heißt. Da es in der Methode useOn keine lokale Variable id gibt, kannst einfach id schreiben anstelle von this.id. this.id wäre aber auch zulässig.
Fangen wir mal - kleiner Tipp, man kann Dinge auch ausprobiern, was passiert z.B. wenn nicht casted?
this brauchst du nur zwingend, wenn es wie z.B. im Konstruktor eine lokale Variable oder einen Parameter gibt, der genauso wie das Feld heißt. Da es in der Methode useOn keine lokale Variable id gibt, kannst einfach id schreiben anstelle von this.id. this.id wäre aber auch zulässig.
Weil du ein GameObject hast. Und ein GameObject hat kein Feld id. Das heißt, bei object.id würde der Compiler meckern, dass er kein Feld id kennt.
Die Frage verstehe ich nicht. Das ist die letzte Zeile der Methode, wenn du da ankommst, wird false zurückgegeben. Einen If-Block gibt es da nicht.