示例:
class Parent {
public void func(){
System.err.println("parnet");
}
}
class Child extends Parent {
@Override
protected void func(){
System.err.println("child");
}
}
是非法的,但如果我们切换可见性,这是合法的。它以这种方式设计的原因是什么?我不能理解它。
答案 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 .