【发布时间】:2016-11-19 11:56:00
【问题描述】:
我有以下代码:
public class Main {
public boolean equals(String other){
return other == new Object();
}
public boolean equals(Object other){
return other == new Object();
}
public static void main(String[] args){
String s = "";
Object b1 = new Main();
System.out.println(b1.equals(s));
}
}
据我所知,equals 方法选择应该这样工作:
在编译期间将选择签名,并且由于s 是编译时类型(例如type),因此应选择带有参数String 的方法,并且由于b1 是Main 的一个实例然后我们将输入我们的Main 实现equals 而不是Object's。
但是,在调试时,我看到我使用 Object 类型的参数输入了 Main 实现。
我看到了那 2 篇文章:
Overloaded method selection based on the parameter's real type - 没有解释我的情况,而是s 的类型应该是 Object 的情况。
https://stackoverflow.com/a/8356435/4345843 - 据我所知,这个答案如果属实,支持我的理论。
很高兴得到解释。
【问题讨论】:
标签: java inheritance overloading dynamic-dispatch method-dispatch