关于Implicit super constructor is undefined. Must explicitly invoke another constructor

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白学了。
感谢交大的张晨同学。


 

 

 

你可能感兴趣的:(javase,java,构造函数)