天天看點

Java入門6 子類初始化

接着上一篇來

文章目錄

    • 接着上一篇來
      • 九、子類初始化

九、子類初始化

子類不能繼承構造方法,想要調用父類的構造方法就得使用super。

super()

表示調用無參的構造方法,super()裡面帶幾個參數,就是調用哪一個構造方法。( 這裡的調用相當于是執行,而不是簡單的聲明。)

然後你會發現一個有意思的錯誤:

class A{
	public int i=0;
	A(int m){
		i=1;
	}
}
public class x5 extends A {
	x5(int m){
		i=2;
	}
}
           

這裡會報錯:

Implicit super constructor A() is undefined. Must explicitly invoke another constructor

隐式超構造函數A()是未定義的。必須顯式調用另一個構造函數

後來才發現,子類初始化時一定會調用父類的構造方法,不寫super,就是預設調用無參構造方法。而這裡的A沒有無參的,是以會報錯。

那麼,不調用不行嗎?

因為子類繼承了父類,那麼就預設的含有父類的公共成員方法和公共成員變量,這些方法和變量在子類裡不再重複聲明。如果你初始化子類的時候,不初始化父類,那麼你通過子類調用父類方法或變量的時候會出現什麼情況呢?當然就是抛異常阿!

是以,Java虛拟機會在你初始化子類的時候預設的初始化子類的父類。而且是一層一層的往上遞進!