例子:
class Parent {
public void func(){
System.err.println("parnet");
}
}
class Child extends Parent {
@Override
protected void func(){
System.err.println("child");
}
}
是非法的,但如果我们切换可见性,它是合法的。如此设计的原因是什么?我无法理解它。
例子:
class Parent {
public void func(){
System.err.println("parnet");
}
}
class Child extends Parent {
@Override
protected void func(){
System.err.println("child");
}
}
是非法的,但如果我们切换可见性,它是合法的。如此设计的原因是什么?我无法理解它。
这是因为有人可能使用“父”对象来引用“子”对象的实例,而降低可见性会破坏继承“契约”。
想象一下,如果你有一个类 'Cat' 扩展 'Animal',它有公共方法breathe()和eat().
现在,如果您的“Cat”类breathe()设为私有,那么拥有引用您的猫的 Animal 的人将无法调用breathe()该猫(并且我们不能在 Java 中拥有不快乐的猫!)
如果您获得了父类的实例,您应该能够访问它的所有公共方法。这是合同的一部分。
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 .