java中涉及继承关系的初始化顺序

来源:互联网 发布:php的filegetcontents 编辑:程序博客网 时间:2024/05/20 02:26

在http://blog.csdn.net/xdugucc/article/details/78217098这篇博文中对单个类成员变量初始化和构造器初始化顺序做了介绍。

而这篇将讲解具有继承关系的类中的初始化顺序。


一个类中具有静态成员和静态代码块,非静态成员和非静态代码块,构造器这些需要初始化的东西。现在他有一个父类。那么当生成一个子类对象时,必然需要对父类中需要初始化的东西进行初始化。顺序如下:

(如果静态成员和静态代码块还未初始化过)

1.父类静态成员和静态代码块

2.子类静态成员和子类静态代码块

3.父类非静态成员和非静态代码块

4.父类构造器

5.子类非静态成员和子类非静态代码块

6.子类构造器


来看一个例子吧,改编自Thinking in java.

class Bowl {Bowl(int marker) {System.out.println("Bowl(" + marker + ")");}}class Table {static Bowl bowl1 = new Bowl(1);Table() {System.out.println("Table()");} Bowl bowl2 = new Bowl(2);}class Cupboard extends Table{Bowl bowl3 = new Bowl(3);static Bowl bowl4 = new Bowl(4);Cupboard() {System.out.println("cupboard()");;}}public class StaticInitializationWithExtention {public static void main(String[] args) {new Cupboard();}}/**output: * bow(1) * bow(4) * bow(2) * table() * bow(3) * cuoboard() */

根据所说的初始化顺序应该能很快得出正确的结果。





原创粉丝点击