在Java中,我有时看到构造函数声明为“public”,有时却没有访问修饰符,这意味着它是程序包私有的。在什么情况下我必须使用“over over”,反之亦然?
最佳答案
问题包含答案。如果允许包外部的客户端代码实例化对象,则使构造函数公开。如果您不希望这样做(因为对象是特定于包的,或者对象本身无法直接实例化),请使用package-private。
例如,如果您的客户端代码应使用Car
(这是一个接口),并且某些软件包com.company.cars
包含一些类,这些类实现了Car
接口(BMW, WV, Opel
),依此类推,那么您宁愿有一个工厂来实例化必要的Car实施。因此,只有工厂才能访问构造函数。
public CarFactory {
public Car getCar(CarType carType) {
Car result = null;
switch(carType) {
case BMW:
result = new BMW();
case Opel:
result = new Opel();
}
return result;
}
}
class BMW implements Car {
// package-private constructor
BMW();
}