在现实世界中,我对实用程序类和抽象类使用默认访问权限,我不希望人们调用这些类或从其他包中使用这些类。假设您有一个接口和两个从某个抽象类扩展的具体实现。您将两个具体的类声明为 final 类,因为您不一定希望人们对它们进行子类化(请参见有效的 Java)。出于同样的原因,您也不希望人们在您的抽象类上胡闹。如果对抽象类使用默认访问,那么人们只有在将类放入包中时才会看到它。它不是万无一失的,但我认为它是默认访问的合理使用/说明。也就是说,它不能像保密那样防止细节泄露,也就是说不能保证任何事情,这意味着它不是一个特别有用的约定。
/*
* Package private constructor which shares value array for speed.
* this constructor is always expected to be called with share==true.
* a separate constructor is needed because we already have a public
* String(char[]) constructor that makes a copy of the given char[].
*/
String(char[] value, boolean share) {
// assert share : "unshared not supported";
this.value = value;
}