当superClass没有构造函数时,如何在子类中声明构造函数

时间:2014-11-19 18:19:14

标签: java inheritance constructor

我正在尝试为子类实现构造函数,但是在编译时我不断获得"error: class, interface, or enum expected"

我的整体代码如下:

public class Super{
    //methods go here, no constructor.
}

这是我尝试的但是没有用:

public class Sub extends Super{
    private boolean myCondition;
    public Sub(boolean condition){
        super();
        myCondition = condition;
    }
}

我认为我不需要在subs构造函数中调用super(),因为编译器应该隐式调用它。

感谢。

1 个答案:

答案 0 :(得分:1)

每个类都有一个构造函数。如果未指定,则获得默认构造函数。 JLS-8.8.9 Default Constructor

  

如果一个类不包含构造函数声明,则隐式声明一个没有形式参数且没有throws子句的默认构造函数。

     

如果声明的类是原始类Object,则默认构造函数具有空体。否则,默认构造函数只调用不带参数的超类构造函数。

     

如果默认构造函数是隐式声明的,但是超类没有可访问的构造函数(第6.6节),它不带参数且没有throws子句,那么这是一个编译时错误。

     

在类类型中,如果该类声明为public,则默认构造函数被隐式赋予访问修饰符public(§6.6);如果该类被声明为protected,则默认构造函数被隐式赋予访问修饰符protected(§6.6);如果该类被声明为private,则默认构造函数被隐式赋予访问修饰符private(§6.6);否则,默认构造函数具有无访问修饰符隐含的默认访问权限。

所以Super(一个public类)有一个编译器插入的默认构造函数,类似于

public Super() {
  super();
}