这段内容摘自:http://docs.oracle.com/javase/tutorial/java/IandI/super.html
注意:如果一个构造函数没有显式调用超类的构造函数,Java编译器会自动插入对超类无参构造函数的调用。如果超类没有无参构造函数,则会出现编译时错误。Object类有这样的构造函数,因此如果Object是唯一的超类,则没有问题。
我制作了这个小例子来测试这个规则:
class P作为超类(它是一个空类):
我制作了这个小例子来测试这个规则:
class 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
指定构造函数,所以编译器已经为你添加了无参构造函数,因此你的N
类中的隐式super();
调用是有效的。 - Alexis C.P
类有一个无参构造函数。如果查看您的P
类生成的字节码,您将会看到它。 - Alexis C.