Java构造函数具有比其类更广泛的访问级别

Java规范允许具有默认访问权的类具有其构造函数的公共访问权限,它的目的是什么,因为它不能在其包之外引用?

我想将此作为评论,但由于评论中不允许使用代码标签….

关于你对CristopheDs答案的评论:

package bob; class MySuperHiddenClass { public MySuperHiddenClass() { System.out.println("bob"); } } 

 package bob; public class MyPublicClass extends MySuperHiddenClass { } 

在MyPublicClass中没有声明构造函数,但您仍然可以从任何包中调用新的MyPublicClass。

如果你问为什么你可以拥有public构造函数:这是因为你可以在扩展基类时明确地(或隐含地)调用它们。

类可见性决定了外部世界如何创建类的实例。 因此,包私有类只能在声明它们的包中实例化。 方法可见性(包括构造函数)确定已经实例化的实例如何在其类定义之外使用。

如果您使用私有/受保护的构造器声明包私有类,您将如何从同一个包中的另一个类实例化它?

两件事:类可见性 – 确定如何在定义包之外创建实例。 方法可见性(包括构造函数) – 确定如何控制对成员的访问,而不管包的可见性如何。