什么时候应该将构造函数声明为public,何时应该是package-private?

时间:2010-12-30 11:42:11

标签: java access-modifiers

在Java中,我看到有时构造函数被声明为'public',有时它没有访问修饰符,这意味着它是package-private。我必须使用一个以上的情况,反之亦然?

3 个答案:

答案 0 :(得分:2)

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

例如,如果您的客户端代码应该使用Car(这是一个接口)而某些包com.company.cars包含实现Car接口的类({{ 1}})等等,那么你宁愿有一个工厂来实例化必要的Car实现。因此,只有工厂才能访问构造函数。

BMW, WV, Opel

答案 1 :(得分:1)

修饰符适用于与字段和方法相同的构造函数。

  1. 如果是public,任何课程都可以访问可以>。
  2. 如果是private,则该类以外的其他课程访问
  3. Read more about access control at documentation

    当您使用Factory pattern或Singleton pattern

    时,通常构造函数为private

答案 2 :(得分:0)

“包私有”(默认访问),尽管是默认的,但除了外部类/接口/枚举之外,很少是一个好的选择。它适用于具有固定子类集(在同一个包中)的抽象类,有点像同一枚举中的enum构造函数。如果外部类型是包私有,那么您可以将公共构造函数和成员公开,而不是更奇特的访问修饰符。