警告
本文最后更新于 2023-07-07,文中内容可能已过时。
引用
继承的好处:
- 提高了代码的复用性
- 提高了代码的维护性
- 让类与类之间产生了关系,是多态的前提
继承的弊端:类的耦合性很强
设计原则:低耦合,高内聚。
java 中的继承特点
Java 只支持单继承,不支持多继承。Java 支持多层继承(继承体系)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| class A {
}
class B extends A {
}
/*
class C extends A,B {
}
*/
class C extends B {
}
class ExtendsDemo {
public static void main(String[] args) {
}
}
|
java 中的继承注意事项
- 子类只能继承父类所有非私有的成员(成员方法和成员变量)
- 子类不能继承父类的构造方法,但是可以通过 super 关键字去访问父类构造方法。
- 不要为了部分功能而去继承
那么,我们什么时候考虑使用继承呢?
继承中类之间体现的是:”is a”的关系。
如果两个类满足这个关系:xxx is a yyy,那么他们就可以使用继承。
1
2
3
| Student,Person 对
Dog,Animal 对
Dog,Pig 错
|
继承
继承间的构造方法关系:创建子类对象,会先去访问父类的构造方法。对父类的数据进行初始化。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| package jicheng;
class Fu{
public int num = 10;
public Fu(){
System.out.println("父类");
}
}
class Zi extends Fu{
public int num = 20;
public Zi(){
System.out.println("子类");
}
public void show(){
int num = 30;
System.out.println(num);//30
System.out.println(this.num);//20
System.out.println(super.num);//10
}
}
public class test {
public static void main(String[] args) {
Zi z = new Zi();
z.show();
}
}
|
程序运行结果
代码块
代码块的执行顺序: 静态代码块 –> 构造代码块 –> 构造方法
代码的执行特点:静态代码块只执行一次,构造代码块每次调用构造方法都执行。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| package jicheng;
class Fu {
static {
System.out.println("父类静态代码块");
}
{
System.out.println("父类构造代码块");
}
public Fu() {
System.out.println("父类构造方法");
}
}
class Zi extends Fu {
static {
System.out.println("子类静态代码块");
}
{
System.out.println("子类构造代码块");
}
public Zi() {
System.out.println("子类构造方法");
}
}
public class test {
public static void main(String[] args) {
Zi z = new Zi();
Zi z2 = new Zi();
}
}
|
程序运行结果:
1
2
3
4
5
6
7
8
9
10
| 父类静态代码块
子类静态代码块
父类构造代码块
父类构造方法
子类构造代码块
子类构造方法
父类构造代码块
父类构造方法
子类构造代码块
子类构造方法
|
继承间的成员关系
注意事项
子类中所有的构造方法默认都会访问父类中空参数的构造方法。为什么呢?因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。