为什么Java不允许降低父方法的可见性,但允许增加它们?

时间:2013-02-21 20:59:35

标签: java inheritance

示例:

class Parent {
    public void func(){
        System.err.println("parnet");
    }
}

class Child extends Parent {
    @Override
    protected void func(){
        System.err.println("child");
    }
}

是非法的,但如果我们切换可见性,这是​​合法的。它以这种方式设计的原因是什么?我不能理解它。

2 个答案:

答案 0 :(得分:1)

这是因为有人可能正在使用“父母”。对象是指“孩子”的一个实例。对象,并降低可见性会破坏继承'契约。

想象一下,如果你有一个班级' Cat'延伸' Animal'它有公共方法breathe()eat()

现在,如果你的猫是#39; class breathe()私有,然后有一个动物引用你的猫的人不能在猫身上打电话给breathe()(而我们在Java中也不会有不快乐的猫!)

答案 1 :(得分:0)

如果您获得父类的实例,您应该能够访问其所有公共方法。这是合同的一部分。

Child类与父类相比具有“is a”属性,因此它至少可以完成Parent可以执行的操作。

例如:

List<Parent> parents=new List<Parent>();
parents.add(new Child());
...
parents.get(0).func(); // you should always be able to call it , since it's a Parent instance .