Java 覆盖方法不起作用

Java override method doesn't work

谢谢大家。事实上,有人已经为那个 class 打了补丁,这打乱了正确的行为。 最后我通过检查 classloader 找到了这个。 见谅:)

这里,public class Son extends public class Parent extends public class GrandParent

在 Parent 中,此方法覆盖 GrandParent:

@Override
public String getSomething() {
    return "blabla";
}

在 Son 中,相同的方法覆盖 Parent:

@Override
public String getSomething() {
    return null;
}

奇怪的是,当我 运行 声明为 GrandParent 并构造为 Son 的对象的 getSomething() 时,它进入了 Parent 的代码并且 returns "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"。你的代码有问题。

它甚至可以与父实例一起使用,请查看:

public class Parent {
    public String getSomething()
    {
        return "parent";
    }
}

public class Son extends Parent {

    @Override
    public String getSomething() {
        return "son";
    }

    public static void main(String[] args) {
        Son son = new Son();
        System.out.println(son.getSomething());
        Parent par = (Parent)son;
        System.out.println(par.getSomething());
    }
}

结果:

son
son