-
默認構造方法
鎖定
默認構造方法是Java語言的一種語法,是指沒有參數的構造方法,可以分為2種:隱含的、程序中顯式定義的。
- 中文名
- 默認構造方法
- 類 型
- Java語言的一種語法
1、默認構造方法
在java語言中,每個類至少有一個構造方法。如果程序中沒有顯式定義任何構造方法,
那麼java語言將自動提供一個隱含的默認構造方法。只要程序中已經顯式定義了構造方法。
那麼java語言將不再提供隱含的默認構造方法。
//實例1
class Base { Base(int i) { System.out.println("Base("+i+")"); } } class Sub extends Base { Sub() { System.out.println("Sub()"); } Sub(int i) {System.out.println("Sub("+i+")"); } public static void main(String[] args) {} } /*output: z.java:9: 找不到符號符號: 構造函數 Base()位置: 類 BaseSub() { System.out.println("Sub()"); }^ z.java:11: 找不到符號符號: 構造函數 Base()位置: 類 Base{^2 錯誤 */
通過分析以上編譯錯誤,原因是Base父類缺少默認構造方法,正因為Base父類定義了帶參數的構造方法,以至於java語言將不再提供隱式的默認構造方法,所以代碼無法通過編譯。
//實例2
class Base { Base(int i) { System.out.println("Base("+i+")"); } } class Sub extends Base { Sub() { super(8); System.out.println("Sub()"); } Sub(int i) { super(9); System.out.println("Sub("+i+")"); } public static void main(String[] args) {} }
情況變得撲朔迷離起來,雖然Base父類沒有顯式提供無參數的默認構造方法,
而java語言也不會提供隱式的默認構造方法,但以上代碼竟然正常編譯通過了。
2、構造方法的顯式與隱式調用
那麼在生成子類的實例對象時,系統將默認調用父類無參數的構造方法。
看看真實的實例1代碼:
class Base { Base(int i) { System.out.println("Base("+i+")"); } } class Sub extends Base { Sub() { super(); System.out.println("Sub()"); } Sub(int i) { super(); System.out.println("Sub("+i+")"); } public static void main(String[] args) {} } 原來隱式調用的super();被省略了,
這下也就知道了實例2為什麼得以正確編譯。