public class Test7 {
public static void main(String[]args){
Test test1 = new Test("aa");
Object obj = new Test("aa");
System.out.println(test1.equals(obj));
}
}
class Test{
private String value;
public Test(String v){
value = v;
}
public boolean equals(Test o){
if(o == this){
return true;
}
if(o instanceof Test){
Test test = (Test)o;
return value.equals(test.value);
}
return false;
}
}
為何test.equals(obj)調用的是Object的equals方法,謝謝
原因在於你類Test定義的equals方法參數是Test類型的 而Test繼承自Object Object本身就有一個equals方法,他的參數是Object類型的
也就是說你的Test實際上有兩個equals方法,一個是參數為Test類型的 一個是為Object類型的.
在你的例子中obj雖然實際類型是Test 但是聲明類型為Object 所以在調用test.equels方法時 實際上是匹配的Object上的那個equals方法而不是Test的. 明白了麼 騷年