默认构造函数未调用
问题描述:
为什么在调用默认构造函数时未调用默认构造函数(相同类),但父类的默认构造函数正在调用 - 为什么?默认构造函数未调用
class A{
A(){
System.out.println("A()");
}
}
class B extends A{
B(){
System.out.println("B()");
}
}
class C extends B{
C(){
System.out.println("C()");
}
C(int i){
System.out.println("<------>"+i);
}
}
public class sample {
public static void main(String[] args) {
C c = new C(8);
}
}
输出:
A()
B()
<------>8
答
这是怎样的语言工作的:只有一个构造函数在每个类调用,除非你明确调用从另一个(就像这样:How do I call one constructor from another in Java?)一个构造函数。
+0
感谢您的回复......您能证明您的陈述有理吗? – bharanitharan 2011-05-19 13:32:52
答
这是Java的规则。如果你想要你的行为,你必须使用this()
作为C(int)中的第一条指令。
答
如说这是之前的Java标准的行为,如果你想一些代码来一直呼吁建设一个对象,你可以使用基于类声明类“C”的初始
class A{
{
System.out.println("A()");
}
A(){
}
}
答
,你被超载的构造,因此,当你创建一个新的“C”对象,并在整数关口用下面的代码:
C c = new C(8);
要调用构造函数
C(int i){
System.out.println("<------>"+i);
}
代替构造
C(){
System.out.println("C()");
}
因此它不会打印出 “C()”。重载构造函数/函数取决于传入参数的类型和数量。最重要的是,只有1个构造函数被调用,用于创建每个对象。
从技术上讲,这不是默认构造函数。在Java中,如果源中没有构造函数,则会提供合成的默认构造函数。具有零参数的构造函数被称为* no-args *构造函数。这与C++的不同之处在于,在各种情况下默认调用默认构造函数。 (Java语言中唯一一个无参数构造函数将被隐式调用的情况是,子类构造函数不显式调用“this(...)”或“super(...)”。) – 2011-05-19 13:12:38