Java 构造函数的缺省访问修饰符

2022-09-01 16:20:52

任何人都可以解释显式no-arg构造函数(和其他构造函数)的默认访问修饰符是什么吗?


答案 1

在这方面,构造函数与方法相同 - 如果您不提供显式的公共,私有或受保护的,那么构造函数将获得默认的“包私有”可见性。它可以从同一类中调用,也可以从同一包中的任何其他类调用,但不能从不同包中的子类调用(因此,如果一个类只有包可见的构造函数,则任何子类都必须在同一包中)。

私有构造函数可防止任何其他类实例化此类,但您可以在调用其自己的私有构造函数的类中拥有一个公共静态工厂方法。这是单例等事物的常见模式。


答案 2

JLS 8.8.9 默认构造函数

如果类不包含构造函数声明,则会自动提供不带任何参数的默认构造函数:

如果类被声明为 public,则默认构造函数被隐式赋予访问修饰符 public;
如果类被声明为受保护,则默认构造函数被隐式赋予访问修饰符 protected;
如果该类被声明为 private,则默认构造函数被隐式赋予访问修饰符 private;否则,
默认构造函数具有无访问修饰符所隐含的默认访问权限。