谢谢大家实际上,有人为该课程贴了补丁,这打乱了正确的行为。
最后,我通过检查类加载器发现了这一点。
原谅我:)

在这里,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/

10-10 19:19