继承思想和extends关键字
inheritance.ExtendsDemo
- 需求:了解继承
- 分析:
-
继承概述:把多个类中相同的内容提取出来定义到一个类中
-
继承的实现格式:class 子类名 extends 父类名 {}
-
好处:
- 提高代码复用性
- 提高代码可维护性
- 让类与类之间产生关系,是多态的前提
- 注意:类与类产生了关系,也是继承的一个弊端:类与类的耦合性增强了
-
Java中继承的特点:
- Java只支持单继承,不支持多继承
- Java支持多层继承(继承体系)
-
注意事项:
- 子类只能继承父类所有非私有的成员(成员方法和成员变量)
这是继承的另一个弊端:打破了封装性(子类直接继承父类的成员)
(子类能调用继承自父类的成员方法调用父类的私有成员变量?
->此时子类调用的成员方法是谁的成员方法?成员变量是谁的成员变量?) - 子类不能继承父类的构造方法,但可以用super()关键字访问父类的构造方法
- 不要为了部分功能而去继承
- 子类只能继承父类所有非私有的成员(成员方法和成员变量)
-
应用场景:继承体现的是"is a"的关系
- 采用假设法:
如果有两个类A,B,如果A∈B或B∈A,可以考虑使用继承
- 采用假设法:
-
继承的背景下类的组成部分的各自关系
-
成员变量之间的关系:
- 子类中的成员变量和父类中的成员变量名称不一样
- 子类中的成员变量和父类中的成员变量名称一样
在子类方法访问一个变量的查找顺序:
子类方法局部范围
->子类的成员范围
->父类的成员范围
->报错
-
构造方法的关系:
- 子类中所有的构造方法默认都会访问父类中的空参数的构造方法
[表述有问题,其实是因为子类初始化之前要先完成父类初始化,父类初始化时调用了子类构造方法中的super]
[系统默认提供super(),即访问父类中的空参数的构造方法] - 原因:子类将继承和使用父类数据,所以子类初始化之前要先完成父类初始化
- 注意:
- 子类的每一个构造方法的第一条语句默认都是:super() <- (无参构造)
- 如果父类没有无参构造方法,子类的构造方法会报错
- 解决方案:
- 添加无参构造方法
- 子类通过super显式调用父类其他带参构造方法
- 子类通过this去调用本类的其他构造方法
子类中一定最少要有一个访问了父类的构造方法(调用链的终点一定要访问父类的构造方法)
- 解决方案:
- this(…)或者super(…)必须出现在构造器的第一条语句上,否则就可能对父类数据进行多次初始化
- 子类中所有的构造方法默认都会访问父类中的空参数的构造方法
-
成员方法的关系:
- 子类中的方法和父类中的方法声明不一样
- 子类中的方法和父类中的方法声明(方法名、参数列表、返回值)一样->方法重写
- 通过子类调用方法的查找顺序:
子类的成员范围
->父类的成员范围
->报错 - 方法重写(方法覆盖、方法复写):
-
定义:子类中出现和父类中一模一样的方法声明
-
特点:
- 方法名不同,就调用对应的方法
- 方法名相同,使用子类自己的
-
应用:
- 情况:子类需要父类功能,而功能主体子类有自己特有内容时,可以重写父类的方法
- 功能:沿袭了父类的功能,又定义了子类特有的内容
-
注意:
- 如果方法名一样,参数列表不同,将成为方法重载
- 父类中的私有方法不存在被重写
- 子类重写父类方法时,访问权限不能更低(低权限不能覆盖高权限)
- 即子类重写方法的访问权限要大于等于父类的方法,最好一致
- 父类静态方法,子类也必须通过静态方法进行重写(算不上方法重写[多态])
- 所以:子类重写父类方法时,最好声明一模一样
-
- 通过子类调用方法的查找顺序:
-
-
本文围绕Java的继承思想和extends关键字展开。介绍了继承的概念、实现格式、好处与弊端,阐述了Java继承的特点。还分析了继承背景下类的成员变量、构造方法、成员方法的关系,包括查找顺序、方法重写等内容,并给出相关注意事项和解决方案。
1529

被折叠的 条评论
为什么被折叠?



