我只是在类ConstructorOne中继承类ConstructorTwo,而不是创建任何对象(显式至少)。那么为什么ConstructorTwo类中的构造函数必须是公共的?
我收到此错误:ConstructorTwo()在ConstructorTwo中不公开;无法从外包装
访问package one;
import two.ConstructorTwo;
public class ConstructorOne extends ConstructorTwo {
public static void main(String args[]) {
}
}
package two;
public class ConstructorTwo {
ConstructorTwo() {
super();
System.out.println("Default constructor in package TWO!");
}
}
答案 0 :(得分:2)
它必须是公共的原因是因为当Java调用任何构造函数时,它必须在调用子类构造函数中的任何代码之前调用超类构造函数。如果Java由于隐私错误而无法访问超类构造函数,那么它就无法执行超类构造函数,这是调用任何构造函数所需的操作(根据Java)。这就是它必须公开的原因。
答案 1 :(得分:1)
类ConstructorOne
中的默认构造函数调用super();
,它是类ConstructorTwo
中的默认构造函数。在调用方法或构造函数或通过包边界访问字段时,它们需要公开。
答案 2 :(得分:0)
ConstructorOne
类有一个自动生成的公共构造函数,它不带参数,并调用super()
。实际上,这个:
public ConstructorOne() {
super();
}
如果您不自己编写构造函数,则所有类都隐式具有这样的构造函数。因此,需要有一个可用的构造函数来调用超类(在这种情况下,它必须是public
或protected
才能被另一个包中的子类访问。)
答案 3 :(得分:0)
当构造函数公开时,任何人都可以调用它。当构造函数是私有的时,通常意味着您需要以其他方式构造对象,通常使用作者为此目的创建的另一个公共静态方法。