包私有访问级别比protected
:更具约束性:仅通过子类化类仍然可以访问受保护的属性和方法。受保护的成员是(或可能是)旨在继承的,而包私有的成员则不是。
通常使用程序包专用成员,因此程序包中的多类可以访问特定于实现的属性或(实用程序)方法。
很好的例子是的package-private构造函数String
和StringBuilder.value
char数组:
String(char[] value, boolean share) {
this.value = value;
}
因此,如果内容已经存在,则java.lang
包中的类可以有效地创建新Strings
内容,char[]
而不会影响安全性。您无法在应用程序中执行此操作,因为如果可以,您将可以访问(引用)String
不可变的内部char数组(不计算反射!)。
在StringBuilder
(或者说AbstractStringBuilder
,其中的执行来自)char数组保持的电流值char[] value
和存取方法本char[] getValue()
也包私人的,从而各种实用方法String
等contentEquals(StringBuffer sb)
并contentEquals(CharSequence cs)
可以利用该对效率和更快的比较而无需内部char数组暴露于世界”。
protected
修饰符与package private
子类相同,只是子类也被邀请参加聚会。但是,如果不自然地创建子类关系(仅出于访问目的),那将是错误的。通常EmailSender
,将某个类作为DomainObjectFilter
类的子类通常是没有任何意义的,反之亦然。在这种情况下,通常只使用该方法public
(也许在注释中说它在概念上不是公开的...)。