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的. 明白了么 骚年
class Test{
private String value;
public Test(String v){
value = v;
}
外面取不到值的