面向对象三大特征:
- 面向对象的三个基本特征是:封装、继承、多态
- 继承:
- 继承是一种物结类的层次模型,并且允许和鼓励类的重用,他提供了一种明确表述共性的方法
- 一个新累可以从现有的类中派生,这个过程称之为继承,新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)
- 派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要
继承:
- 继承的意义
- extends关键字
- 构造方法与继承
- super关键字
- 调用父类的构造方法
- 方法覆盖的作用
- 方法覆盖的规则
- super关键字在方法覆盖中的使用
继承的意义:
- 在现实生活中的继承,可以理解为儿子继承父亲的财产,即为财产重用
- 面向对象程序设计中的继承,则为代码重用
- 继承是利用现有的类创建新类的过程中,现有的类称之为基类(或父类),创建的新类称之为派生类(或子类)
- 复用代码是Java众多引人注目的功能之一;但想要成为具有革命性的语言,仅仅依靠复制代码并加以改变是不够的,它还必须能够做更多的事情,尽可能的复用代码是大家一直都在追求的,继承就是一种复用代码的方法,同时,它也是Java的三大特性之一
- 继承是Java面向对象编程技术的一块基石,因为它允许创建分等级层次的类
- 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为
- 如图所示,最高层是最普遍的、最一般的情况、往下的每一层都比上一层更加具体,并包含有高层的特征,通过这样的层次结构使下层的类能自动享用上层列的特点和性质
- 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,通过使用继承我们能够非常方便的复用以前的代码,能够提高开发的效率
extends关键字
- 在Java中,使用extends关键字描述类与类之间的继承关系,其基本用法为:
【访问权限修饰符】 【修饰符】 子类名字 extends 父类名字{子类体} |
- 由于Java是单亲继承体质,因此在描述类与类的继承关系时。extends关键字后面只能是一个名字,而不是一个列表
- 实例:
-
构造方法与继承:
-
通过前面我们知道了子类可以继承父类的属性和方法
-
但是有一样东西是子类无法继承的:构造方法
-
对于构造方法而言,他只能被调用,而无法被基础
-
当构建子列对象时会优先 隐式自动调用父类的无参构造方法 ,而且这个构建调用的过程是从父类 “向外” 递归扩散的,也就是从父类开始子类一级一级地完成构建,即如果C继承自B,而B继承自A,那么构建C的对象时,会先调用A 的构造方法,随后调用B的构造方法,最后调用C的构造方法,以此类推
-
构造方法的调用次序如下:
super关键字:
- Java语言中,要求子类有责任保证它所继承的父类尽快进入到一个稳定、完整的状态中。
- 如果没有这个约束,那么子类的某个继承父类的方法可能会使用到父类中的一些变量,而这些变量并没有进行初始化,从而产生一些难以预料的后果
- 如果没有无参的父类的构造方法,子类必须要显示的调用父类的构造方法,而且必须是在子列构造器中做的第一件事
- 通过super关键字可以在子类构造方法中显示调用父类的构造犯法,该调用必须位于子类的构造方法的第一行
总结:
- 类的继承有关键字extends确定,Java语言为单亲继承,及一个子类只有一个父类,而一个父类可以有多个子类
- 子类可以重写父类中某一个方法,称之为方法覆盖,也可以称方法重写,是继承中非常重要的知识点。如果子类需要修改父类继承到方法的方法体,就可以使用方法覆盖
- 当构建子类对象时会优先调用父类的无参构造方法,而且这个构建调用的过程是父类“向外”递归扩散的,也就是说,从父类开始向子类一级一级完成构建,列如:如果c继承自b,而b继承自a,那么构建c的对象时,会优先调用a的构造方法,然后调用b的构造方法,最后调用c的构造方法,以此类推
- 如果没有无参的父类构造方法,子类必须使用super显示的调用父类的构造方法,而且必须是在子类构造器中做的第一件事
- this引用对象自身、调用自己的构造方法,而super调用的则是父类定义的成员变量、方法或构造方法,super不能当做引用传递给其他调用者但是this可以