在以下情况下覆盖具有不同参数的方法时,将调用哪种方法?

Cho*_*hop 3 java equals object

假设我要覆盖Object的equals()方法:

    public boolean equals(Object o){
      //something
    }

    public boolean equals(SomeClass s){
      //something else
    }
Run Code Online (Sandbox Code Playgroud)

SomeClass显然也是一个Object,如果我使用带有SomeClass实例的equals作为参数,那么将调用哪个方法?

Cos*_*atu 6

这不是压倒性的,它正在超载.如果你这样做,你将最终得到两个equals方法:一个将被调用(子类的)子SomeClass实例,一个用于任何其他对象.

需要注意的一点是,方法绑定将是静态的:编译器将根据引用的声明类型决定调用哪一个.因此,以下将调用equals(Object),而不是equals(SomeClass):

Object o = new SomeClass();
o.equals(o);  // invokes SomeClass.equals(Object)
Run Code Online (Sandbox Code Playgroud)