【JAVA學習路-think in java】p130:繼承之帶參構造器

package pkg;

class Basic2{// 1st
	Basic2(int i){
		System.out.println("1st class, Basic constructor:"+i);		
	}
	Basic2(){
		System.out.println("1st class,Basic default constructor");
	}
}
class ExtendBasic2 extends Basic2{//2nd
	ExtendBasic2(int i){
	super(i+1);
	System.out.println("2nd class, Extend constructor:"+i);
	}
}

public class p130 extends ExtendBasic2 {//3rd
	public p130() {
		super(11);//Constructor call must be the first statement in a constructor
		System.out.println("3rd class,P130 constructor working now");
	}
	public static void main(String[] args) {
		p130 obj=new p130();
	}
}

OUTPUT:

1st class, Basic constructor:12
2nd class, Extend constructor:11
3rd class,P130 constructor working now
 

 

package pkg;

class Basic2{// 1st
	Basic2(int i){
		System.out.println("1st class, Basic constructor:"+i);		
	}
	Basic2(){
		System.out.println("1st class,Basic DEFAULT constructor");
	}

}
class ExtendBasic2 extends Basic2{//2nd
	ExtendBasic2(int i){
//	super(i+1);
	System.out.println("2nd class, Extend constructor:"+i);
	}
}

public class p130 extends ExtendBasic2 {//3rd
	public p130() {
		super(11);//Constructor call must be the first statement in a constructor
		System.out.println("3rd class,P130 constructor working now");
	}
	public static void main(String[] args) {
		p130 obj=new p130();
	}
}

OUTPUT:

1st class,Basic DEFAULT constructor
2nd class, Extend constructor:11
3rd class,P130 constructor working now

 

package pkg;

class Basic2{// 1st
	Basic2(int i){
		System.out.println("1st class, Basic constructor:"+i);		
	}
//	Basic2(){
//		System.out.println("1st class,Basic DEFAULT constructor");
//	}

}
class ExtendBasic2 extends Basic2{//2nd
	ExtendBasic2(int i){
//	super(i+1);
	System.out.println("2nd class, Extend constructor:"+i);
	}
}

public class p130 extends ExtendBasic2 {//3rd
	public p130() {
		super(11);//Constructor call must be the first statement in a constructor
		System.out.println("3rd class,P130 constructor working now");
	}
	public static void main(String[] args) {
		p130 obj=new p130();
	}
}

ERROR:

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

 

總結:

1、如果基類存在非默認構造器:此時子類構造器要調用基類的默認構造器,該默認構造器必須被“顯示定義”。

      (除非基類只有默認構造器,那麼子類允許調用該隱式默認構造器:刪除所有basic2的構造器,3rd代碼可以運行)

2、通過super向父類傳遞參數。該傳遞參數方式,必須位於子類構造器的首句(first statement)。

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章