欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入
public static void main(String[] args){
derived d=new derived();
derived t=new derived(9);
}
}
D:”java”thinking”think6> 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”thinking”think6> java derived
base constructor int i
derived constructor
base constructor int i
derived constructor int i
super(i)表示父类的构造函数base(i)请大家注意一个是super(i)一个是super(8)。大家想想是为什么??
结论:子类如果有多个构造函数的时候,父类要么没有构造函数,让编译器自动产生,那么在执行子类构造函数之前先执行编译器自动产生的父类的缺省构造函数;要么至少要有一个显式的缺省构造函数可以让子类的构造函数调用。
[1][2]
只要有信心,人永远不会挫败