基于SCJP程序的怀疑(考试310-065)

时间:2010-07-13 03:31:42

标签: java constructor scjp

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(" ");
} }

在上面的程序中,我猜测输出必须是BD,但在书中他们说编译失败了。谁能解释一下呢?

2 个答案:

答案 0 :(得分:3)

派生类Bottom2需要使用super调用基类构造函数,否则会出现编译错误。例如,如果你这样做,它将编译:

public Bottom2(String s) { super(s); System.out.print("D"); }

请参阅the section on Subclass Constructors

答案 1 :(得分:2)

当你有公共Top(String s)时,java不会创建没有参数的默认构造函数,那么当你编写子类时,构造函数会查找默认构造函数(因为你没有明确地调用)...那么汇编失败了。