Überschreibende Java-Methode mit mehreren Optionen auswählen
Zur Verdeutlichung- Nach meinem Verständnis sind die folgenden Methoden alle override vonObject.equals
. Sind sieÜberlastun stattdessen und ich verstehe das nicht richtig?
Ich führe diesen Code aus:
public class AA
{
private int _val=0;
public AA()
{
_val=5;
}
}
public class BB extends AA
{
public BB()
{
....
}
public boolean equals(BB ob)
{
return false;
}
public boolean equals(Object ob)
{
return true;
}
public boolean equals(AA ob)
{
return true;
}
public static void main(String args[])
{
AA a2=new BB();
BB b1=new BB();
if((a2.equals(b1)))
System.out.println("hi");
}
}
Class AA hat keinequals
Method
Ich versuche herauszufinden, mit welcher zweiten Methode ausgelöst wird und nicht mit welcher ersten. Mein Verständnis ist:
Seit Klasse AA gibt es keinequals
-Methode, ich nehme an, dass der Compiler zur Kompilierungszeit das @ ausführen möchequals
vonObject
Klasse.Zur Laufzeit findet der Compiler heraus, dass a2 tatsächlich ein BB-Objekt ist und daher @ haequals
Methoden, die die Methode von @ überschreibObject
. Was mir jedoch nicht klar ist, ist, warum die zweite Methode(Object ob)
wird anstelle des ersten @ gewäh(BB ob)
, wenn das gesendete Objekt definiert ist und tatsächlich ein BB-Objekt ist.
Würde mich über Ihr Feedback freuen!