我正在尝试为子类实现构造函数,但是在编译时我不断获得"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(),因为编译器应该隐式调用它。
感谢。
答案 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();
}