複製鏈接
請複製以下鏈接發送給好友

默認構造方法

鎖定
默認構造方法是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、構造方法的顯式與隱式調用
如果子類的構造方法中沒有顯式地調用父類構造方法,也沒有使用this關鍵字調用其他重載構造方法,
那麼在生成子類的實例對象時,系統將默認調用父類無參數的構造方法。
看看真實的實例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為什麼得以正確編譯。