2013-08-24 74 views

回答

4

没有什么不对,有暗示调用super构造函数。

你还没有编写任何类C的构造函数,所以默认的构造函数将由编译器提供。

C(){ 
    super(); 
} 

如果提供了默认的构造函数,则会调用super()。 在你的情况下,C extends B所以B构造函数被调用。

如果您没有任何其他班的班级,那么默认情况下它也延伸Object班。所以Object类的构造函数会被调用。

+2

+1解释构造函数链。 –

+0

@PaulBellora这是构造函数重载。链接隐式地发生在继承树上(Prasad解释过)或者使用super()(也可能会重载)。 –

0

java中每个构造函数的第一行调用super构造方法,即java如何工作。 你应该阅读它。

+1

只有当你不在这里调用一个重载的'this()'。 –

1

当你实例化一个C会有构造函数调用C,B,A,和对象。 C必须能够像任何直接或间接的超类一样行事,并具有所有领域的领域。 X类构造函数的作用是使对象初始化为X.

如果没有声明的构造函数,编译器会创建一个无参数的构造函数,因此每个类都至少有一个构造函数。如果不是Object构造函数的构造函数不是以“this”或“super”构造函数调用开始的,则编译器将其视为以“super();”开始,即对直接超类的无参数构造函数的调用。

相关问题