我在java书中看到了这个带有测试的程序,我无法理解,为什么这是正确的答案:
该计划的输出是什么?
class Base
{
Base()
{
System.out.print("Base");
}
}
public class Alpha extends Base
{
public static void main(String[] args)
{
new Alpha(); /* Line 12 */
new Base(); /* Line 13 */
}
}
所有答案:
正确的答案是BaseBase
。
答案 0 :(得分:9)
当您第一次调用new Alpha()
时,您调用Alpha
的默认构造函数。由于未明确声明,因此将其隐式定义为:
public Alpha() {
super();
}
因此,new Alpha()
调用Base
的默认构造函数(因为Alpha
是Base
的子类),它打印“Base”。然后,new Base()
也调用该构造函数并再次打印“Base”,从而产生“BaseBase”的最终输出。
答案 1 :(得分:3)
这将是B.BaseBase的回答。 理由很简单。实例化时所有对象都调用该类的默认构造函数。 虽然类Alpha中没有构造函数,但java隐式提供了一个构造函数,并通过它调用其基类的默认构造函数,即Base()。
就像在每个默认构造函数
的开头添加了一个隐式的super()关键字public Alpha() {
super();
}
当你调用new Base()时也是如此;显示了在其构造函数中的相应输出。