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