【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)。

 

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