【发布时间】:2016-12-18 06:11:42
【问题描述】:
运行这部分代码时,为什么我得到的是 'O' 而不是 'P'?
class Pop{
@Override
public boolean equals(Object o){
System.out.print("O");
return false;
}
public boolean equals(Pop p){
System.out.print("P");
return false;
}
public static void main (String[] args)
{
Pop p1 = new Pop();
Object o = p1;
o.equals(p1);
}
}
【问题讨论】:
-
因为overload解析——在基于参数类型的方法中选择——是在编译时执行的,基于指定目标对象和方法的表达式的声明类型论据。只有override解决方案——根据调用它的对象的类型在给定签名的方法中进行选择——在运行时动态发生。
-
Jashua Bloch 在他的书Effective Java 中正是针对这种情况。
-
[您可以在下面的答案中找到解释](stackoverflow.com/questions/30109231/…)
-
因为您没有研究
override是什么以及何时它会发生? -
@JohnBollinger 你的意思是获取 Pop 作为参数的 equals 方法实际上是 overload,而不是 override我>?
标签: java overriding