instanceof Operator

JavaIsTheBest

Bekanntes Mitglied
Java:
public boolean equals(Object that) {
        if (this == that)
            return true;
        if (!(that instanceof Vec))
            return false;
        Vec other = (Vec) that;
        if (size != other.size)
            return false;
        for (int i = 0; i < size; i++) {
            if (!elems[i].equals(other.elems[i])) {
                return false;
            }
        }
        return true;
    }

Warum wird hier überprüft, ob that eine Instanz vom Typ Vec ist?
Es wäre doch viel einfacher, wenn man als Parameter ein Vec anstatt ein Object übergibt.
Dann bräuchte man auch nicht mehr das instanceof.
 
equals ist eine Methode die von Object stammt. Der Sinn von equals ist es, zwei beliebige Objekte miteinander vergleichen zu können, egal von welchem Typ sie tatsächlich sind.
Wenn man equals jetzt so implementieren würde, daß es bereits einen Vec entgegen nimmt, muss derjenige, der die Funktion aufruft ja bereits wissen, daß man gerade zwei Vec-Objekte vergleichen will. Wenn man dann zwei unbekannte Objekte vergleichen wollte, müsste man ja erst ermitteln, von welchem Typ die entsprechenden Objekte sind und dann die jeweilige equals-Methode aufrufen. Da ist es einfacher und flexibler, diese Prüfung einmal in der equals-Funktion zu machen, als jedesmal wenn man equals aufruft.

Ein passendes Beispiel hast du vermutlich schon in der for-Schleife am Ende deiner Funktion. Du vergleichst hier ja vermutlich Objekte vom Typ Object, ohne daß du an der Stelle jeweils den Konkreten Typ des Objekts ermitteln musst 😉
 
Ich glaube jetzt hab ich es verstanden. Die equals und toString Methoden stehen in der Klasse Object und sind vom Java System schon vorgegeben.
Als Parameter erwarten die Methoden ein Object. Wenn ich also, die Methoden equals und toString überschreiben will, dann muss die Signatur GENAU SO aussehen, wie in der Klasse Object?
 
Anders gesagt: Jedes Objekt, das der Entwickler selbst erstellt, erbt von der Klasse Object. Das hat diverse vorgegebene Methoden und diese können überschrieben werden.
 

Neue Themen


Zurück
Oben