15.09.2014 Aufrufe

Schrödinger programmiert Java - Das etwas andere Fachbuch

Schrödinger programmiert Java - Das etwas andere Fachbuch

Schrödinger programmiert Java - Das etwas andere Fachbuch

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Auf den Spuren der<br />

Objektgleichheit<br />

Ja, aber sicherlich erinnerst du dich daran, dass du die equals()-Methode für<br />

deine Klassen selber implementieren musst. Die geerbte Methode aus Object<br />

prüft nämlich nur die Speicheradresse. Du musst die Methode überschreiben!<br />

Und da wir zwei, <strong>Schrödinger</strong>, nicht den Schuh-Kennerblick haben wie deine Freundin,<br />

sind für uns jetzt erstmal alle Schuhe gleich, die die gleiche Größe und die gleiche<br />

Farbe haben und die entweder Stöckel haben oder keine.<br />

[Schwierige ige Aufgabe]<br />

Probieren ren geht über studieren! Probiere<br />

es selbst: st: Erstelle eine korrekte Imple-<br />

mentierung erung von equals() für die<br />

Klasse Schu uhPaar, so dass der<br />

Schuhtester korrekt funktioniert.<br />

Hier siehst du, wie du es machen könntest:<br />

@Override*2<br />

public boolean equals(Object object){ *1<br />

boolean gleich = false;<br />

if(object != null && object instanceof SchuhPaar) {<br />

SchuhPaar schuhPaar = (SchuhPaar) object;<br />

gleich*5 = schuhPaar.getFarbe().equals(this.getFarbe()) *3<br />

&& schuhPaar.getGroesse() == this.getGroesse() *4<br />

&& schuhPaar.isMitStoeckeln() == this.isMitStoeckeln(); *4<br />

}<br />

return gleich;<br />

}<br />

*1 Der Parameter für die<br />

equals()-Methode ist<br />

immer Object, nicht etwa –<br />

wie man meinen könnte –<br />

SchuhPaar. Ganz wichtig,<br />

denn sonst überschreibst<br />

du nicht, wie geplant,<br />

sondern überlädst die<br />

Methode nur.<br />

*2 Anhand der @Override-<br />

Annotation erkennt der Compiler, dass du<br />

überschreiben möchtest. Würdest du<br />

statt Object die Klasse SchuhPaar<br />

in der Methodendeklaration verwenden,<br />

würde der Compiler aufschreien.<br />

*4 Die Schuhgröße und die Angabe, ob die<br />

Schuhe Stöckel haben, sind beides primitive<br />

Datentypen, und die werden nach wie vor mit dem<br />

==-Operator verglichen.<br />

*3 Die Farbe ist als String implementiert,<br />

und die Klasse String hat eine<br />

eigene equals()-Methode, die<br />

bereits korrekt funktioniert. Die kannst du<br />

ruhigen Gewissens verwenden.<br />

*5 Nur wenn alle drei<br />

Eigenschaften gleich sind, ist<br />

gleich true.<br />

314 Kapitel ACHT

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!