Java测试(初学者)

时间:2014-09-28 10:24:33

标签: java

我在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 */
    } 
}

所有答案:

  • A.Base
  • B.BaseBase
  • C.编译失败
  • D.代码运行没有 输出

正确的答案是BaseBase

2 个答案:

答案 0 :(得分:9)

当您第一次调用new Alpha()时,您调用Alpha的默认构造函数。由于未明确声明,因此将其隐式定义为:

public Alpha() {
    super();
}

因此,new Alpha()调用Base的默认构造函数(因为AlphaBase的子类),它打印“Base”。然后,new Base()也调用该构造函数并再次打印“Base”,从而产生“BaseBase”的最终输出。

答案 1 :(得分:3)

这将是B.BaseBase的回答。 理由很简单。实例化时所有对象都调用该类的默认构造函数。 虽然类Alpha中没有构造函数,但java隐式提供了一个构造函数,并通过它调用其基类的默认构造函数,即Base()。

就像在每个默认构造函数

的开头添加了一个隐式的super()关键字
public Alpha() {
    super();
}

当你调用new Base()时也是如此;显示了在其构造函数中的相应输出。