Java类可访问性

与我的另一个问题略有关联:以下内容有何不同:

private class Joe protected class Joe public class Joe class Joe 

再一次,最后两个之间的差异是我最感兴趣的。

任何包中的类都可以访问公共类。

具有默认访问权限的class Joeclass Joe )仅对同一包中的其他类可见。

private和protected修饰符只能应用于内部类。

私有类只对其封闭类和同一封闭类中的其他内部类可见。

受保护的类对同一包中的其他类以及扩展封闭类的类是可见的。

  • private:仅对外部类可见
  • protected:仅对外部类可见
  • public:所有其他类都可见
  • class:package-private,对于同一个包中的类是可见的

有关详细信息,请参阅JLS 。

具有默认访问权限的类在声明中没有前面的修饰符。

默认访问是包级访问,因为只有同一包中的类才能看到具有默认访问权限的类。

如果类具有默认访问权限,则另一个包中的类将无法创建该类的实例,甚至无法声明变量或返回类型 。 编译器会抱怨。 例如:

 package humanity; class Person {} package family; import humanity.Person; class Child extends Person {} 

尝试编译这两个来源。 如您所见,它们位于不同的包中,编译将失败。