为什么java不允许在父类中使父类的实例方法更具限制性

acv*_*uno 2 java polymorphism overriding

多态性允许程序员继承,覆盖或重载父类的实例方法.

但是,它不允许在父类中使父类的实例方法更具限制性.即它不允许使用父类实例方法的相同名称,在子类中声明为private.

如果子类没有覆盖它,JVM也会识别实例方法的父类版本.

同样,为什么JVM不识别实例方法的父类版本,如果子类使其更具限制性?

子类中父类的限制性更强的方法可以被视为子类特定方法,而不是编译器重写的方法.

Ree*_*sey 17

这一切都是为了遵循Liskov替代原则.

为了使面向对象编程中的继承行为符合预期,子类应该能够替换父类实例而不会破坏类的用户.

使子方法更具限制性基本上是说"我不希望这种方法可见".在这种情况下让JVM自动替换父类实现只会增加大量的混淆 - 只是改变调用行为可能会导致非常意外的行为,甚至完全在子类中......