java - 什么时候应该将构造函数声明为公共(public)的,什么时候应该是包私有(private)的?

标签 java access-modifiers

在 Java 中,我有时会看到构造函数被声明为“public”,有时它没有访问修饰符,这意味着它是包私有(private)的。在什么情况下我必须重新使用一个,反之亦然?

最佳答案

问题包含答案。如果您允许包外的客户端代码实例化您的对象,请将构造函数公开。如果你不想那样(因为对象是包特定的或者对象本身不能直接实例化)使用 package-private。

例如,如果您有一个客户端代码应该使用 Car(这是一个接口(interface))并且一些包 com.company.cars 包含类,它实现Car 接口(interface)(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();
}

关于java - 什么时候应该将构造函数声明为公共(public)的,什么时候应该是包私有(private)的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4562304/

相关文章:

c# - 如何使聚合根方法仅可用于领域事件,而无其他。

java - 如何在paintComponent中自动添加形状?

java - Android:不调用 Volley String 请求 onresponse

java - 我正在做一个独特的值(value)java程序。我尝试错误

java - static 修饰符是否会更改 java 中类成员的访问级别?

c++ - 访问修饰符在继承中的不同行为取决于 "this"关键字和模板或缺少它们

java - 在基本 AJAX(如 HTTP 轮询)和反向 AJAX(如长轮询)之间进行选择时应考虑哪些因素?

java - 查看 Java 数组的一部分

java - 为什么要保护 String 构造函数而不是在这里私有(private)?

typescript - 包含只读对象的扩展运算符