0

背景信息 我对 Sierra & Bates, SCJP v6 书中的问题有疑问。即第2章问题2。给出的答案是“编译失败”。但是,当我在 neBeans 中尝试此操作时,代码编译并运行没有错误。它还返回了“D”的输出,这不是替代方案之一。在各种论坛中,关于是否需要插入 super() 等,关于这个问题还有一些其他的讨论。但是似乎没有人认识到它可以编译。

这一点非常重要,因为我正在为 SCJP 学习,我发现并非所有问题都可以在 netBeans 中复制。在这种情况下,我可能会学会相信某些代码在(出于考试目的)不起作用时会起作用。

包含代码以方便参考。

class Top { 
    public Top(String s) { System.out.print("B"); } 
} 

public class Bottom2 extends Top { 
    public Bottom2(String s) { System.out.print("D"); } 
    public static void main(String [] args) { 
        new Bottom2("C"); 
        System.out.println(" "); 
    }
}
4

1 回答 1

1

Top没有默认构造函数(默认构造函数是具有空参数列表的公共构造函数。因此,构造函数Bottom2必须显式调用超级构造函数(并传递其参数),但没有,因此编译失败。

事实上,日食 helios 说:

隐式超级构造函数 Top() 未定义。必须显式调用另一个构造函数

和 javac 说:

cannot find symbol
symbol  : constructor Top()
location: class tools.Top
    public Bottom2(String s) { System.out.print("D"); }
                             ^

您确定您在 Netbeans 中尝试过相同的代码吗?

于 2011-04-17T20:35:27.847 回答