摘自:http : //docs.oracle.com/javase/tutorial/java/IandI/super.html
注意:如果构造函数未明确调用超类构造函数,则
Java编译器会自动插入对的无参数构造函数的调用
超类。如果超类没有无参数的构造函数,
您将得到一个编译时错误。对象确实具有这样的构造函数,所以
如果Object是唯一的超类,则没有问题。
我做了这个小例子来测试:
P类为超类(其空类):
package org.standro.com.pk1;
public class P {
}
和类N在不同的包中,类N扩展了类P,而没有显式调用super():
import org.standro.com.pk1.P;
public class N extends P {
public N() {
//imlicitly super() is called here .. that means the constructor of P
}
public static void main(String[] arg){
N n=new N();
}
}
且没有编译错误。.我使用JDK1.7,此示例有什么问题,为什么我没有收到错误?
我认为上述粗体字应为:
如果超类没有任何构造函数,则...
因为如果至少有一个构造函数,编译器将报错。
或者如果有人有解释..
谢谢
由于类P扩展了对象,并且没有构造函数,因此它的构造函数默认为no参数构造函数,该构造函数隐式调用Object中的构造函数。
要导致错误,您需要像这样向P的构造函数添加一个参数:
public class P {
public P(int a) {
}
}
现在N试图隐式调用在P中寻找无参数构造函数的super()。但是,由于我们在P中添加了构造函数,因此无法再使用默认的无参数构造函数。
说明:
如果没有构造函数,则默认添加no-arg一个。如果存在任何类型的构造函数,则不添加默认的no-arg构造函数
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句