Java的继承与多态

发表于:2016-12-15 10:25

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:One Word    来源:51Testing软件测试网采编

  父类与子类是从一般到特殊的关系,用”is-a”表示,在父类中存放共同的状态和行为即实例字段和实例方法,子类存放个体独有的成员数据
  Java的继承语法格式
  [修饰符] class 子类 extends 父类 {...}
  通过继承,子类能自动具有父类的某些方法和字段,访问内容由具体数据的访问修饰权限有关,比如子类能继承父类 用public和protected修饰的成员数据 ,以及同一个包下父类默认包访问权限的数据, 并且 构造器是不能被继承 .
  !!!警告: 父类的private成员无法被子类访问, 更不能被继承
  构造器为什么不能被继承???
  · 构造器的名称需要与类名相同,因此父类构造器不能继承给子类
  · 构造器实际上是隐时static声明的方法
  继承作用
  · 减少代码的重复
  · 表现类之间的is-a关系,多个类所组成的体系
  继承特点
  · 只支持单继承,没有多继承
  · 单继承基础上存在多重继承
  · 任何类 除Object类外 的直接子类或者间接子类都为Object类
  · 破坏了类的封装 ,让子类具有部分不该有的功能和行为
  继承与组合的取舍
  类之间存在一般与特殊的关系时使用继承, 若不存在此种关系就采用组合的方式
  继承的覆写
  What 覆写
  继承自父类的某些方法不符合子类的特性,子类需要对其方法进行重新定义的做法叫做方法覆盖
  Why 覆写
  类的继承关系中只有对实例方法存在覆写,字段没有覆写的概念
  覆写的原则: 一同两小一大
  · 子类与父类具有相同的方法签名
  · 子类的返回值类型是父类返回值类型的子类或者同类
  · 子类抛出的异常类型是父类抛出异常类型的子类或者同类
  · 子类的方法权限访问修饰符跟父类的相等或者更大
  关键点
  仅存在与继承关系的子类和父类间
  只针对实例方法,与字段无关
  私有的父类方法和构造器由于不能被继承所以不存在覆写现象
  覆写与重载的区别
  拓展 @override声明的使用: 表示一个方法声明打算重写超类中的另一个方法。如果方法利用此注释类型进行注解但没有重写超类方法,则编译器会生成一条错误消息
  super关键字
  与this关键字一样,同属于对象级别, 不能与static共用
  What is super: 暂时理解为当前对象的父类对象; 其实该关键字用来告知编译器直接从父类开始查找紧跟的字段/方法,直至到根类Obejct;而父类中this表示的引用仍是当前对象,
  super作用
  调用父类可访问的被覆盖的实例方法
  调用父类可访问的被隐藏的实例字段
  调用父类的构造器初始化对象
  继承的隐藏
  What is 隐藏?: 子类继承父类后,将父类的部分方法和字段进行遮蔽,使得直接无法访问的现象
  类的继承关系中隐藏现象有哪些?
  在可访问权限下,子类的静态方法与父类的静态方法完全相同即方法签名相同时,会隐藏其父类静态方法
  在可访问权限下,子类的字段与父类的字段标识符相同,与其类型无关,会将父类字段隐藏,只能通过super关键字进行访问;并且这种访问方式让字段暴露,破坏了类的封装,不推荐使用
  还有一种隐藏来自于当类内实例变量名与局部变量名重复时,无法直接访问其实例字段的情况
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号