跳到主要内容

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

管

管理员

java

2019年09月11日 2,990 次阅读
本页目录

  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() 调用权限

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

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

Related

相关文章

同分类文章 →
2024年12月27日 java

Spring 事务中的几种隔离级别介绍

  Spring 为了方便用户设定事务的隔离级别,专门定义了一个枚举类:Isolation。这个枚举类和事务传播行为的枚举类很像。 public enum Isolation { DEFAULT(TransactionDefinition.ISOLATION_DEFAULT), READ_UNC

2021年07月07日 java

&&的优先级

&&的优先级高于|| 这里就有一种特殊情况:如果表达式中含有||,总是先算 || 左边的子表达式,这里是((a+1)>0)永远先于(((++a)<0) && (!((b--)<=0)))计算(并且由于优先级,先计算a+1,再与0比较,而不是先将1与0比较,再和a相加),如果 || 左边的

2021年03月29日 java

求圆心到点的直线与圆的相交点.

若O(x1,y1),A(x2,y2)满足OA>r。 则向量OA=(x2-x1,y2-y1),可设向量OB=(m,n),则有:m(y2-y1)-n(x2-x1)=0且(m-x1)²+(n-y1)²=r²。 解得B((x2-x1)r/√(x2-x1)²+(y2-y1)²,(y2-y1)r/√(x2-x1)&s

WeChat

扫码加我微信

微信二维码