[英]Should we declare a public constructor when the class is declared as package private?
[英]When should a constructor be declared public and when should it be package-private?
在Java中,我看到有时构造函数声明为'public',有时它没有访问修饰符,这意味着它是package-private。 我必须使用一个以上的情况,反之亦然?
这个问题包含了答案。 如果允许包外的客户端代码实例化对象,请将构造函数设置为public。 如果您不希望这样(因为对象是特定于包的,或者对象本身无法直接实例化),请使用package-private。
例如,如果你有一个应该使用Car
(这是一个接口)的客户端代码,而某些包com.company.cars
包含实现Car
接口( BMW, WV, Opel
)等的类,那么你会而是有一个工厂,实例化必要的汽车实施。 因此,只有工厂才能访问构造函数。
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();
}
修饰符适用于与字段和方法相同的构造函数。
public
,任何类都可以访问并查看它。 private
,那么该类之外的其他类都不能访问或查看它。 通常,在使用Factory模式或Singleton模式时,构造函数将变为private
“包私有”(默认访问),尽管是默认的,除了在外部类/接口/枚举之外,很少是一个好的选择。 它适用于具有固定子类集(在同一个包中)的抽象类,有点像同一枚举中的enum
构造函数。 如果外部类型是包私有,那么您可以将公共构造函数和成员公开,而不是更奇特的访问修饰符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.