3

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

4

3 回答 3

4

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

关于您对 CristopheDs 回答的评论:

package bob;

class MySuperHiddenClass {

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

package bob;
public class MyPublicClass extends MySuperHiddenClass {

}

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

于 2012-05-11T07:46:12.977 回答
2

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

于 2012-05-11T07:36:48.380 回答
0

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

如果你声明一个包私有类,带有一个私有/受保护的构造函数,你将如何从同一个包中的另一个类实例化它?

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

于 2012-05-11T08:34:49.510 回答