利用继承可以基于已知存在的类够造一新类,继承已存在的类就是复用这些类的方法和域,还可以添加一些新的方法和域,以满足新的需求。被继承的类称作基类(父类),继承父类的类称作派生类(子类)
继承的格式:
class 类名 extends 父类名{}
有继承关系的子父类间的成员变量、成员方法、构造方法之间的关系:
1)成员变量关系
子类的成员变量与父类的成员变量名称相同时,使用变量的原则:就近原则,使用的是子类的成员变量(与多态中的成员变量关系结合理解);
在子类方法中访问一个变量的查找顺序(就近原则):
A.在子类方法的局部范围查找
B.在子类的成员范围找
C.在父类的成员找
2)构造方法关系
-
子类中所有的构造方法(无论带参与否)默认都会访问父类的无参构造
-
子类中所有的构造方法的方法体第一句语句默认是super(),为了父类数据的初始化
若父类没有无参数构造,那么- 子类需要通过super(...)去调用父类的其他带参的构造方法
- 子类需要使用this(...)去调用本类的其他构造方法,且这个构造方法中使用super(...)调用了父类的其他带参的构造方法;
this(...)和 super(...)第一要放在构造方法的第一句,否则多次初始化父类数据
3)成员方法关系
子类的成员方法与父类的成员方法的返回值、方法名、参数列表都相同(这种情况也叫方法重写)时,子类的成员方法覆盖父类的成员方法,调用时使用的是子类的方法;若还想调用父类的方法体则使用super.(...)。此时子类的成员方法权限 >= 父类的成员方法权限
继承的几个特征:
JAVA语言不支持多继承
子类只能继承父类所有的非私有成员
子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。
不要为了部分功能去继承
有继承关系的子父类在加载时的顺序:
类加载时,发现其有父类先加载父类,再加载子类。静态修饰内容是随着类的加载而加载的,所以当子父类中有static时,static是最先加载的;类中有静态代码块、构造代码块、构造方法,则执行顺序是:静态代码块>构造代码块>构造方法
阻止继承
想要类不能被继承,使用final修饰
final class 类名 extends 父类名{}
网友评论