Quote
继承的好处:
继承的弊端:类的耦合性很强
设计原则:低耦合,高内聚。
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) { } } |
---|
那么,我们什么时候考虑使用继承呢? 继承中类之间体现的是:”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 | 父类 子类 30 20 10 |
---|
代码块的执行顺序: 静态代码块 –> 构造代码块 –> 构造方法 代码的执行特点:静态代码块只执行一次,构造代码块每次调用构造方法都执行。
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 | 父类静态代码块 子类静态代码块 父类构造代码块 父类构造方法 子类构造代码块 子类构造方法 父类构造代码块 父类构造方法 子类构造代码块 子类构造方法 |
---|
使用变量的时候,会先找局部范围。 如果想直接使用成员变量,加关键字:this 即可。 如果想直接使用父类的成员变量,加关键字:super 即可。
子类中所有的构造方法默认都会访问父类中空参数的构造方法。为什么呢?因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。