public class FF {
}
class SS extends FF{
public SS (int a,int b){
//do something
}
}
上面的代码没有问题。
public class FF {
public FF(int a){}
}
class SS extends FF{
}
对于上面的代码,编译是会出问题的,出什么问题?
Implicit super constructor FF() is undefined for default constructor. Must define an explicit constructor
什么意思?
我们知道,ss继承了ff,那么在构造ss之前,就会先构造ff。
ss没有人为指定的构造函数,因此new SS的时候就用的是默认的构造函数,而子类默认的构造函数调用的也是父类默认的构造函数。
但是父类有了人为指定的构造函数,就覆盖了本身自动生成的默认无参构造函数,换言之,父类没有无参构造函数,那么就出错了。
public class FF {
public FF(int a){}
}
class SS extends FF{
public SS(String a){
System.out.println("llll");
}
}
上面的代码还是会出错,为什么?
因为不管子类的构造函数是什么样的形式,都会默认调用父类的默认的无参的构造函数。
上面的情况父类依然没有构造函数。
那怎么办?
或者
public class FF {
//去掉构造函数
}
class SS extends FF{
public SS(String a){
System.out.println("llll");
}
}
或者
public class FF {
public FF(int a){}
}
class SS extends FF{
public SS(int a){
//指定要调用父类的某个构造函数
super.(a);
System.out.println("llll");
}
}
哎 感觉几年的java白学了。
感谢交大的张晨同学。