天天看點

Java子類初始化與基類的關系

從外部來看子類,它就像是一個與基類具有相同接口的新類,或許還會有一些額外的方法跟屬性。但是繼承并不隻是複制基類的接口。當建立一個子類對象時,該子類對象内部會包含一個基類對象,這個被包含的對象與直接建立的基類對象是一樣的,二者的差別就在于,後者來自外部,而基類的子對象被包裝在到處類對象内部

public class Cartoon extends Drawing{
    Cartoon(){System.out.println("Cartoon constructor");}
    public static void main(String[] args) {
        new Cartoon();
    }
}
class Art{
    Art(){System.out.println("Art constructor");}
}
class Drawing extends Art{
    Drawing(){System.out.println("Drawing constructor");}
}
/*輸出結果:
Art constructor
Drawing constructor
Cartoon constructor
*/
           

由此例子可以發現,構造過程是由基類往外擴散的,所有基類在導出類構造器可以通路它之前,就已經完成了初始化。即使你不為Cartoon()建立構造器,編譯器也會為你合成一個預設的構造器,該構造器将調用基類的構造器