在Java中,我看到有时构造函数被声明为'public',有时它没有访问修饰符,这意味着它是package-private。我必须使用一个以上的情况,反之亦然?
答案 0 :(得分:2)
问题包含答案。如果允许包外的客户端代码实例化对象,请将构造函数设置为public。如果你不想那样(因为对象是特定于包的,或者对象本身不能直接实例化),请使用package-private。
例如,如果您的客户端代码应该使用Car
(这是一个接口)而某些包com.company.cars
包含实现Car
接口的类({{ 1}})等等,那么你宁愿有一个工厂来实例化必要的Car实现。因此,只有工厂才能访问构造函数。
BMW, WV, Opel
答案 1 :(得分:1)
修饰符适用于与字段和方法相同的构造函数。
public
,任何课程都可以访问,可以>>。private
,则该类以外的其他课程访问或 Read more about access control at documentation
当您使用Factory pattern或Singleton pattern
时,通常构造函数为private
答案 2 :(得分:0)
“包私有”(默认访问),尽管是默认的,但除了外部类/接口/枚举之外,很少是一个好的选择。它适用于具有固定子类集(在同一个包中)的抽象类,有点像同一枚举中的enum
构造函数。如果外部类型是包私有,那么您可以将公共构造函数和成员公开,而不是更奇特的访问修饰符。