为什么Java中子类重写方法的访问权限不能低于父类中权限

更新时间:2023-05-25 21:55

  private是私有的,其他类是不能访问的,子类也不可以访问,所以你可以重新实现父类的该方法,不会有冲突,但是你重新实现的方法,不叫重写也不叫重载,是一个该子类新增的方法,和子类的一般扩展方法一样

该问题依赖于里氏代换原则, 先记录下该原则的原理

  里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

把里氏代换原则解释得更完整一些:在一个软件系统中,子类应该可以替换任何基类能够出现的地方,并且经过替换以后,代码还能正常工作。

  转抄他人的:

  因为 向上转型及java程序设计维护的原因

  例:

  假设一个父类A 拥有的方法 public void setXXX(){} 可以被其他任意对象调用

  这个方法被子类B 覆写后 为 void setXXX(){} 即 默认的访问权限只能被本包极其子类 所访问

  假设 其他包中的对象 C 调用 方法为:

  get( A a){

  a.setXXX();

  }

  而此时传入的对象为B类对象,假设为b此时b将转型为a但是b中的setXXX() 调用权限

  已经被缩小了这将造成错误。所以子类对象不能比父类对象访问权限大

  以上只是一个例子还有其他出于易维护、易代码结构设计的设计思想原因