我在下面写的关于jdk-8u111中LinkedList.java的内容正确吗?
/** * Constructs an empty list. */ public LinkedList() { }
我们可以看到构造函数中不存在任何代码,并且 这样一个奇怪的构造函数是用于以后的子类的。我们知道 编译器会自动提供一个无参数
super()
来 子类构造函数(如果该构造函数没有显式的super()
) 呼叫。如果父类没有此类,编译器将报告错误。 无参数构造函数。Error:(x, y) java: no suitable constructor found for parent class(no arguments)
我们可以得出结论,
LinkedList
的空构造函数供子类使用。
答案 0 :(得分:4)
不,这与子类无关。
如果您未定义任何构造函数,则Java将自动添加默认的构造函数。但是,如果确实定义其他构造函数,则必须写出默认构造函数。因为此构造函数存在:
LinkedList(Collection<? extends E> c);
必须明确定义默认构造函数:
LinkedList();
如果我不写出一个显式的空默认构造函数,它将起作用并且没有错误。编译器成功执行。所以可以不写出来吗?如果我们已经有了另一个构造函数,需要写出来吗?
没有构造函数,将添加一个默认构造函数,我们可以成功调用new Thing()
:
class Thing {
}
Thing t = new Thing();
添加了非默认构造函数后,Java不再自行添加默认构造函数。现在new Thing()
是一个错误。
class Thing {
public Thing(int foo) { }
}
Thing t = new Thing();
结果:
Test.java:7: error: constructor Thing in class Thing cannot be applied to given types;
Thing t = new Thing();
^
required: int
found: no arguments
reason: actual and formal argument lists differ in length
1 error
我们必须写出默认的构造函数才能编译代码:
class Thing {
public Thing() { }
public Thing(int foo) { }
}
Thing t = new Thing();