Java构造函数具有比其类更广泛的访问级别
Java规范允许具有默认访问权的类具有其构造函数的公共访问权限,它的目的是什么,因为它不能在其包之外引用?
我想将此作为评论,但由于评论中不允许使用代码标签….
关于你对CristopheDs答案的评论:
package bob; class MySuperHiddenClass { public MySuperHiddenClass() { System.out.println("bob"); } }
和
package bob; public class MyPublicClass extends MySuperHiddenClass { }
在MyPublicClass中没有声明构造函数,但您仍然可以从任何包中调用新的MyPublicClass。
如果你问为什么你可以拥有public
构造函数:这是因为你可以在扩展基类时明确地(或隐含地)调用它们。
类可见性决定了外部世界如何创建类的实例。 因此,包私有类只能在声明它们的包中实例化。 方法可见性(包括构造函数)确定已经实例化的实例如何在其类定义之外使用。
如果您使用私有/受保护的构造器声明包私有类,您将如何从同一个包中的另一个类实例化它?
两件事:类可见性 – 确定如何在定义包之外创建实例。 方法可见性(包括构造函数) – 确定如何控制对成员的访问,而不管包的可见性如何。