继承中执行顺序讨论

继承中,子父类的构造函数(构造函数不被继承)
1.子类必须调用父类的构造函数(构造函数不被继承)
(1)如果没有写调用,那子类的构造函数默认会调用父类无参数的构造函数(改句默认在子类构造函数的第一句)super();
(2)如果要显示的调用那么要用super(参数列表),而且该句必须在子类构造函数中的第一句需要给父类的构造函数传递参数
2.有子类、父类初始化的顺序
(1)先父类静态,然后子类静态,与创建对象无关,只要用到类就会先加载其静态属性并且只加载一次。
(2)父类的定义初始化、父类的构造函数。
(3)子类的定义初始化、子类的构造函数。
package lesson02;

public class Demo2
{

public static void main(String[] args)
{
    B b = new B();// 控制台如何输出
}

}

class A
{
static
{
System.out.println("aa...");// 静态定义初始化块
}
{
System.out.println("bb...");// 定义初始化块
}

A()
{
    System.out.println("cc...");// 构造函数
}

}

class B extends A
{
static
{
System.out.println("dd...");// 静态定义初始化块
}
{
System.out.println("ee...");// 定义初始化块
}

B()
{
    System.out.println("ff...");// 构造函数
}

}

输入结果如下:
aa...
dd...
bb...
cc...
ee...
ff...

你可能感兴趣的:(继承中执行顺序讨论)