如果子类构造函数里没有super,系统默认super(),
顺序是:先父类,后子类,对于每个类,都是先初始化,在调用构造方法
“父类的构造方法调用发生在子类的变量初始化之前”。可以用下面的例子来证明: 例一 // Petstore.java class Animal { Animal() { System.out.println("Animal"); } } class Cat extends Animal { Cat() { System.out.println("Cat"); } } class Store { Store() { System.out.println("Store"); } } public class Petstore extends Store{ Cat cat = new Cat(); Petstore() { System.out.println("Petstore"); } public static void main(String[] args) { new Petstore(); } } 运行这段代码,它的执行结果如下: Store Animal Cat Petstore 例二
class C { C() { System.out.print("C"); } } class D { D() { System.out.print("D"); } } class A { C c = new C(); A() { this("A"); System.out.print("A"); } A(String s) { System.out.print(s); } } public class B extends A { D d= new D(); B() { // super("A->B"); System.out.print("B"); } public static void main(String[] args) { new B(); } } 打印是CAADB
$处若执行的话打印是CA->BDB
|
|