Java中建構函式的陷阱

2021-08-30 07:10:49 字數 613 閱讀 8010

abstract class father

public static void main(string as)

}class child extends father

public static void main(string as)

}

請問此段**是否能編譯通過,並輸出值?

答案是不能編譯通過,因為父建構函式是有引數的。所以子類建構函式需要顯式宣告並且先呼叫其父建構函式,待其父建構函式執行完畢才能執行其自身建構函式的初始化,所以只有調換child中建構函式中兩行**的順序才能編譯通過。

class a

}class b extends a

}class c extends b

public c()

}

這段**說明兩個建構函式中的兩個特性:

1.建構函式在初始化完畢之前首先呼叫其父建構函式,以此類推一直至最高父級。

2.建構函式對於預設建構函式即便不顯式宣告super()也沒有關係,因為編譯器會為其自動新增super()**,前提是其父建構函式必須有無參建構函式。

C 陷阱 建構函式中的多型

c 中主要是通過給函式加上virtual關鍵字來實現多型。多型可用於改變乙個介面的實現,也算是一種嵌入應用層 到底層的實現手段。就算你用不到c 那些複雜的技術,多型肯定會被用到。但加上virtual不一定能保證多型成功 include class base virtual base virtual ...

java中建構函式

3,子父類中的建構函式。在對子類物件進行初始化時,父類的建構函式也會執行,那是因為子類的建構函式預設第一行有一條隱式的語句 super super 會訪問父類中空引數的建構函式。而且子類中所有的建構函式預設第一行都是super 為什麼子類一定要訪問父類中的建構函式。因為父類中的資料子類可以直接獲取。...

Java中建構函式詳解

建構函式 建立構造物件時呼叫的函式。作用 可以給物件經行初始化。建立物件都必須要通過建構函式初始化 1.乙個類中如果沒有定義過建構函式,那麼該類中會有乙個預設的空引數建構函式。2.如果在類中定義了指定的建構函式那麼類中的預設建構函式就沒有了。3.建構函式可以有多個,用於對不同的物件進行針對性的初始化...