从子类调用超类构造函数

时间:2014-12-27 11:13:19

标签: java inheritance constructor

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

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

    public static void main(String [] args) { 
        Bottom2 as=new Bottom2("A");
        new Bottom2("C");
        System.out.println(" ");
    }
}

我想调用超类构造函数。为什么这不编译?

5 个答案:

答案 0 :(得分:3)

super()的调用意味着基类中有一个默认构造函数。您的示例未显示,因此代码无法编译。

因此,为了使其正常工作,只需在子类中添加调用,如下所示:

public Bottom2(String s) 
{   
    super(s); // call to superclass constructor with parameters.
    System.out.print("D"); 
}

答案 1 :(得分:2)

您正在呼叫super(),而不是super(s)。当你有一个参数化的构造函数时,你就不能再使用默认的no-arg构造函数了,这就是super()无法编译的原因。

答案 2 :(得分:0)

你的超类构造函数包含1个字符串参数, 并且您没有使用参数

调用超类 代码中的

超级();

应该是这样的

super(“任何字符串”);

答案 3 :(得分:0)

该程序将给出编译时错误。 必须在类Top

中包含默认构造函数Top()

答案 4 :(得分:0)

首先,它会给出编译时错误(因为如果你在子类中有参数构造函数,那么你必须在基类中没有-arg构造函数),第二个编译器将隐式调用基类的no-arg构造函数(如果没有其他调用超类构造函数或子类构造函数)。所以你不应该写

super();

所以你应该明确地调用

super(s);