1、继承的概述
-
继承的概述
多个类中存在相同的属性和行为时,将这些内容抽取到一个单独的类中,那么多个类无需定义这些属性和行为,只要继承那个类即可。
-
继承格式
通过extends关键字可以实现类与类的继承
class 子类名 extends 父类名 {} 单独的这个类成为父类,基类或者超类;这多个类可以称为子类或者派生类
-
继承的好处
将多个类的共性部分向上抽取到父类当中,以实现代码的复用性和维护性,子类可以继承父类的成员
-
继承的弊端
类的耦合性增强了。
开发的原则是高内聚低耦合。耦合:类和类的关系。内聚:自己独立完成某件事的能力
-
Java中类的继承特点
Java只支持单继承,一个类只能有一个直接父类,不支持多继承
Java支持多层继承----也就是继承体系
2、继承的注意事项
-
子类只能继承父类所有非私有的成员(成员变量和成员方法),父类私有的成员子类不能继承
-
子类不能继承父类的构造方法,也就是构造方法不参与继承,但是可以通过super关键字去访问父类的构造方法。我们在创建子类对象时,先要调用父类的构造方法完成父类数据初始化。
-
继承体现的是一种关系:is a,如果有两个类A,B。只有他们符合A是B的一种,或者B是A的一种,就可以考虑使用继承。
3、继承中成员变量的关系
-
子类中的成员变量和父类中成员变量名称不一样
-
子类中的成员变量和父类中成员变量名称一样
在子类中访问一个变量的查找顺序(“就近原则”)
A:在子类的局部范围找,有就使用
B:在子类的成员范围找,有就使用
C:在父类的成员范围找
4、this和super的区别
-
super:子类局部范围访问父类成员变量
-
区别:
this代表的是本类对象的引用,哪个对象调用方法,方法中的this就代表哪个对象
super代表的是父类存储空间的标识(可以理解为是父类的引用,可以使用super.访问父类的数据)
-
使用情况
A:调用成员变量
this. 成员变量 调用本类的成员变量
super.成员变量 调用父类的成员变量
B:调用构造方法
this(…) 调用本类的构造方法----------空参构造和有参构造
super(…) 调用父类的构造方法
C:调用成员方法
this.成员方法名() 调用本类的成员方法
super.成员方法名() 调用父类的成员方法
5、继承中构造方法的关系
- 子类中所有的构造方法默认都会访问父类中空参数的构造方法
- 当有了继承关系之后,那我们在创建子类对象时,会先调用父类的构造。因为子类想要继承父类的数据甚至还要使用父类的数据,那么说不先初始化父类数据,子类当然也就无法继承和使用父类的数据,所以说在创建子类对象时先要完成父类中的数据初始化。
- 其实,在每一个自定义类的构造方法的第一行语句默认都是super()去调用父类的空参构造。
6、继承中构造方法的注意事项
-
父类没有无参构造方法,子类怎么办?
A:在父类中添加一个无参的构造方法
B:子类通过super去显示调用父类其他的带参的构造方法
C:子类通过this去调用本类的其他构造方法-----前提是本类的其他构造也必须首先访问了父类构造
-
注意事项:super(…)和this(…)必须都出现在第一条语句上,所以不能在构造方法中共存
-
当我们创建子类对象时,父类字节码文件先加载进内存
7、继承中成员方法的关系
-
当子类的方法名和父类的方法名不一样的时候
-
当子类的方法名和父类的方法名一样的时候
通过子类调用方法:
A:先查找子类中有没有该方法,如果有就使用
B:再看父类中有没有该方法,有就使用
8、方法重写概述及其应用
-
什么是方法重写?
当子类对父类中的方法实现不满意,子类可以提供一个和父类一模一样的方法(方法名、参数列表、返回值类型),那么这时候子类的方法会覆盖掉父类中的方法,实际调用时,调用的是子类重写过后的方法。
-
方法重写的应用:
当子类需要父类的功能,而功能主体子类有自己特定的内容时,可以重写父类中的方法。这样既沿袭了父类的功能(super. 调用),又定义了子类特有的内容。
9、方法重写的注意事项
-
方法重写的注意事项:
A:父类中私有的方法子类不能重写
因为父类私有方法子类根本无法继承,何谈重写?
B:子类重写父类方法时,访问权限不能更低
最好就一致
C:父类静态方法 子类也必须通过静态方法进行重写,其实这个算不上方法重写,但现象确实如此(多态中详细解释)。静态方法属于类,不参与重写
D:ctrl+o 快速重写父类的方法
10、final关键字概述
-
为什么会有final?
由于继承中有一个方法重写的现象,而有时候我们不想让子类去重写父类的方法。面对这种情况Java给我们提供了一个关键字 final
-
final 概述
A:final 关键字是最终的意思,可以修饰类,变量,成员方法;
B:final修饰的特点:
修饰类--------------------修饰的类不能被继承
修饰方法-----------------修饰的方法可以调用继承,不能被重写
修饰变量-----------------修饰的变量不能被重新赋值,因为这个量其实是一个常量(一般大写)
C:final 修饰基本类型,是值不能被改变,修饰引用类型,是地址值(引用)不能被改变。