如果我不将它放在子类的构造函数中,这不是编译器自动放置的吗?
这意味着我什至不需要关心它?在一些文章中,他们把它放出来了。
如果我有一个带参数的构造函数,这将是构造函数,还是需要一个没有参数列表的构造函数?
首先是一些术语:
所以所有的类都至少有一个构造函数。
子类构造函数 可以 指定在执行子类构造函数中的代码之前调用超类中的哪个构造函数作为他们做的第一件事。
如果子类构造函数没有指定调用哪个超类构造函数,那么编译器将自动调用超类中可访问的无参数构造函数。
如果超类没有无参数构造函数或不可访问,则不指定要调用的超类构造函数(在子类构造函数中)是编译器错误,因此 必须 指定。
例如:
public class Base { } public class Derived extends Base { }
这很好,因为如果您没有显式添加构造函数,Java 会为您提供一个公共默认构造函数。
public class Base { } public class Derived extends Base { public Derived(int i) { } }
也很好。
public class Base { public Base(String s) { } } public class Derived extends Base { }
以上是编译错误,因为 Base 没有默认构造函数。
public class Base { private Base() { } } public class Derived extends Base { }
这也是一个错误,因为 Base 的无参数构造函数是私有的。