谢谢大家实际上,有人为该课程贴了补丁,这打乱了正确的行为。
最后,我通过检查类加载器发现了这一点。
原谅我:)
在这里,public class Son
扩展public class Parent
扩展public class GrandParent
在Parent中,此方法将覆盖GrandParent:
@Override
public String getSomething() {
return "blabla";
}
在Son中,相同的方法将覆盖Parent:
@Override
public String getSomething() {
return null;
}
奇怪的是,当我运行声明为GrandParent并构造为Son的对象的getSomething()时,它将进入Parent的代码并返回“ blabla”而不是null。
有人看过这个问题吗?任何人都可以对此进行解释吗?谢谢。
最佳答案
如果您尝试以下简单代码:
public class GrandParent
{
public String f() {
return "grand parent";
}
}
public class Parent extends GrandParent
{
@Override public String f() {
return "parent";
}
}
public class Son extends Parent
{
@Override public String f() {
return "son";
}
}
public class Test
{
public static void main(String[] args) {
GrandParent p = new Son();
System.out.println(p.f());
}
}
您会看到打印出的字符串是
"son"
。您在代码中做错了什么。关于java - Java覆盖方法不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28190372/