tring覆盖方法时出现奇怪的Eclipse行为

Ioa*_* P. 4 java eclipse inheritance overriding

我有这两个类,Dog并且Beagle扩展了Dog.

class Dog {
    protected String bark() {return "woof "; }
}
class Beagle extends Dog {
    private String bark() { return "arf "; }
}
class Test {
    public static void main(String args[]) {
        Dog[] dogs = {new Dog(), new Beagle()};
        for(Dog d : dogs)
            System.out.print(d.bark());
    }
}
Run Code Online (Sandbox Code Playgroud)

当我使用任何其他编辑器而不是Eclipse时,上面的代码甚至都没有编译.我收到这个错误:

试图在Beagle类中为bark()方法分配较弱的访问权限.

您还可以在此处查看此行为.

如果我使用Eclipse Indigo(版本:3.7.2),则此代码编译良好,输出为:woof woof.

请让我明白哪一个是正确的,为什么?

提前致谢!

ΦXo*_*a ツ 5

如果我使用Eclipse,这个代码编译得很好,输出是:woof woof.

我不这么认为,你不能降低树皮的可见度

肯定是

@Override
protected String bark() {
    return "arf ";
}
Run Code Online (Sandbox Code Playgroud)

代替

@Override
private String bark() {
    return "arf ";
}
Run Code Online (Sandbox Code Playgroud)

在该修改之后,Begle正确地覆盖了bark方法,因此输出必须是:

woof arf


边注:

版本:Neon.3发布(4.6.3)