class base{ base(){ System.out.println("base constructor"); } base(int i){ System.out.println("base constructor int i"); } } class derived extends base{ derived(){ System.out.println("derived constructor"); } derived(int i){ System.out.println("derived constructor int i"); } public static void main(String[] args){ derived d=new derived(); derived t=new derived(9); } }
D:java hinking hink6>java derived base constructor derived constructor base constructor derived constructor int i
假如將base 類的構造函數注釋掉,則出錯。
class base{ // base(){ // System.out.println("base constructor"); // } base(int i){ System.out.println("base constructor int i"); } } class derived extends base{ derived(){ System.out.println("derived constructor"); } derived(int i){ System.out.println("derived constructor int i"); } public static void main(String[] args){ derived d=new derived(); derived t=new derived(9); } }
D:java hinking hink6>javac derived.java derived.java:10: cannot resolve symbol symbol : constructor base () location: class base derived(){ ^ derived.java:13: cannot resolve symbol symbol : constructor base () location: class base derived(int i){ ^ 2 errors
說明子類中的構造函數找不到顯式寫出的父類中的缺省 構造函數,所以出錯。
那么假如你不想子類的構造函數調用你顯式寫出的父類中的缺省 構造函數怎么辦呢? 如下例:
class base{ // base(){ // System.out.println("base constructor"); // } base(int i){ System.out.println("base constructor int i"); } } class derived extends base{ derived(){ super(8); System.out.println("derived constructor"); } derived(int i){ super(i); System.out.println("derived constructor int i"); } public static void main(String[] args){ derived d=new derived(); derived t=new derived(9); } }
D:java hinking hink6>java derived base constructor int i derived constructor base constructor int i derived constructor int i