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(" ");
}
}
我想调用超类构造函数。为什么这不编译?
答案 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);