【发布时间】:2014-05-03 21:59:24
【问题描述】:
这取自: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指定构造函数,因此编译器为您添加了无参数的构造函数,因此隐式@您的N类中的987654325@ 调用有效。 -
说编译器会添加no-arg构造函数,意思是构造函数不存在那里..所以根据上面的粗体句子,为什么没有编译器时错误?
-
我不明白你。
P类有一个无参数构造函数。如果查看你的 P 类生成的字节码,你会看到它。 -
这就是我一直在寻找的......因此我想知道为什么不澄清这句话并重写为:如果超类没有无参数构造函数并且(至少)有一个参数构造函数..然后编译器会抱怨..我是对的吗?
标签: java