Java8——继承性+覆写+辅助概念

继承:

继承的实现:

Java中如果想实现继承使用extends关键字完成,语法结构如下:

  • class 子类 extends 父类{}:子类会被称为派生类,父类会被称为基类(超类)

继承的优点:

  1. 子类可以直接将父类的操作继续使用,属于代码重用;
  2. 子类可以继续 扩充属于自己的标准。

继承的限制:

继承也有自己的一些要求;

  • Java不允许多重继承,
  • 子类在继承父类的时候严格来说会继承父类中全部操作,但是对于所有的私有操作属于隐式继承,而对于所有的非私有操作属于显式继承。
  • 在子类对象构造之前一定会默认调用父类的构造(默认使用无参构造),以保证父类对象先实例化,而后实例化子类对象;如果父类中没有无参构造方法,那么子类中就必须使用 ''super()"明确调用父类的有参构造方法;

可以发现,"super()" 主要是由子类调用父类中的构造方法,一定要放在子类构造方法的首行!与 this() 类似!

super()与 this()不能同时出现,不管怎么样,子类构造在调用前都要先调用父类的构造,为父类对象初始化后才轮到子类对象初始化。

覆写:

子类对父类继承之后,子类定义的属性或方法可能会与父类同名,参数的类型及个数、返回值相同的方法时,如此称为覆写;

方法覆写:

覆写结果的分析要素;

  • 观察实例化的是哪个类;
  • 观察这个实例化类里面调用的方法是否已经覆写过的,如果没有覆写过就调用父类的;

覆写的使用原则(被动):
如果现在发现父类中的方法名称功能不足(不适合本子类),但是又必须使用使用这个方法名称的时候,就用到了覆写;但是被子类覆写的方法,不能有比父类更严格的访问控制权限;

访问权限:public > default > private ,也就是说 private 是最严格的,如果父类是用 default 声明,那么子类只能是 default 或者 public ;99%情况下都是public!

super方法()与this()方法的区别?

  • 使用"this.方法()"会首先查找本类中是否存在有要调用的方法名称,如果有则调用,如果没有则会查找父类中是否有,如果有则调用,如果没有则会发生编译时的错误提示。
  • 使用"super.方法()"明确表明调用的不是子类方法(不查找子类中是否存在有此方法),而直接调用父类中的指定方法;

重载与覆写的区别?(OverLoading 与 Overrid 的区别?)

 重载覆写
英文单词overloadingOverrid
发生范围发生在一个类里面发生在继承关系中
定义方法名称相同,参数的类型以及个数不相同方法名称相同,参数的类型以及个数相同,方法返回值相同
权限没有权限的限制被覆写的方法不能拥有比父类更为严格的访问控制权限

使用overloading的时候返回值能否不同?

在发生重载关系的时候,返回值可以不同,但是考虑  到程序设计的统一性,最好相同。

关于 super 与 this 的区别?

区别thissuper
功能调用本类构造、本类方法、本类属性子类调用父类构造、父类方法、父类属性
形式先查找本类中是否存在有指定的调用结构,如果有则直接调用,如果没有则调用父类定义不查找子类,直接调用父类操作
特殊表示本类的当前对象/

在以后的开发过程中,对本类或者父类操作,建议加上 " this. " 或者 " super. " 这样好区分。

辅助概念:

final关键字:

final 在Java中被称为终结器;

  1. 使用 final 定义的类不能够再有子类;
  2. 使用 final 定义的类不能被子类所覆写;
  3. 使用 final 定义的变量就变成了常量,常量必须在定义的时候设置好内容,不能修改;
  4. public static final String MSG(大写) = " MMM";声明的就是全局常量;static 的数据保存在公共数据区,所以此时的常量就是一个公共常量;

对象的多态性:

多态严格来讲有2种描述形式:

  • 方法的多态性:
  1. 方法的重载:同一个方法名称,会根据传入参数的类型及个数不同执行不同的方法体;
  2. 方法的覆写:同一个方法,会根据子类的不同,实现不同的功能;
  • 对象的多态性:发生在继承关系类中,子类和父类之间的转换
  1. 向上转型:(自动完成):父类 父类对象 = 子类实例;重要意义在于参数统一;参数统一之后可以调用子类覆写后的方法体,即同一个方法对于不同的子类可以有不同的实现;
  2. 向下转型:(强制完成):子类 子类对象 = (子类)父类实例;向下转型指的是父类要调用子类特殊的方法;因为父类只能看到父类中所有的方法,看不到子类中的方法,强制转换之后就可以看见了。

对于对象的转型给出以下经验总结:

  • 80% 情况下使用向上转型,因为可以得到参数类型的统一,方便我们程序设计(比如链表);注意:子类大部分情况下请以父类的方法名称标准进行覆写,不要有过多的扩充功能;
  • 5% 情况下会使用向下转型,要使用子类的特殊方法;
  • 15% 情况下是不转型的,例如:String;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值