请教高手,以下代码为何输出false

  • 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方法,谢谢


至尊宝的传说
浏览 597回答 2
2回答

慕森王

原因在于你类Test定义的equals方法参数是Test类型的 而Test继承自Object Object本身就有一个equals方法,他的参数是Object类型的也就是说你的Test实际上有两个equals方法,一个是参数为Test类型的 一个是为Object类型的.在你的例子中obj虽然实际类型是Test 但是声明类型为Object 所以在调用test.equels方法时 实际上是匹配的Object上的那个equals方法而不是Test的. 明白了么 骚年
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java