ria*_*ria 42 java polymorphism overriding subclassing
当您在子类中重写方法时降低方法的可见性时,为什么编译器会给出错误消息?
Joa*_*uer 65
因为子类的每个实例仍然需要是基类的有效实例(请参阅Liskov替换原则).
如果子类突然丢失了基类的一个属性(例如公共方法),那么它将不再是基类的有效替代.
sep*_*p2k 18
因为如果允许这样做,可能会出现以下情况:
Class Sub继承自Parent类.Parent有一个公共方法foo,Sub将该方法设为私有.现在下面的代码编译正常,因为声明的类型bar是Parent:
Parent bar = new Sub();
bar.foo();
Run Code Online (Sandbox Code Playgroud)
然而,目前尚不清楚这应该如何表现.一种可能性是让它导致运行时错误.另一种方法是简单地允许它,这样就可以通过转换到父类来从外部调用私有方法.这些替代方案都不可接受,因此不允许.
| 归档时间: |
|
| 查看次数: |
11886 次 |
| 最近记录: |