0

例子:

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

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

是非法的,但如果我们切换可见性,它是合法的。如此设计的原因是什么?我无法理解它。

4

2 回答 2

1

这是因为有人可能使用“父”对象来引用“子”对象的实例,而降低可见性会破坏继承“契约”。

想象一下,如果你有一个类 'Cat' 扩展 'Animal',它有公共方法breathe()eat().

现在,如果您的“Cat”类breathe()设为私有,那么拥有引用您的猫的 Animal 的人将无法调用breathe()该猫(并且我们不能在 Java 中拥有不快乐的猫!)

于 2013-02-21T21:04:01.130 回答
0

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

Child 类与 parent 相比具有“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 . 
于 2013-02-21T21:03:14.947 回答