私はいくつかのJava=テキストを読んでおり、テキストには、クラスとインターフェイスにpublic
またはdefault
アクセス修飾子のみを適用できると書かれています。したがって、それはコンパイルです。宣言するとエラー:
private class A {}
または
protected class A{}
クラスまたはインターフェイスがprivate
またはprotected
アクセス修飾子を受信できないのはなぜですか。
private
は、「包含クラス内でのみ表示可能」を意味します。
protected
は、「包含クラスとサブクラス内、および包含クラスのパッケージ内の任意の場所でのみ可視」を意味します。
したがって、private
はトップレベルのクラスに適用しても意味がありません。 protected
の定義の最初の部分についても同様です。 protected
の2番目の部分couldが適用されますが、デフォルト(パッケージ保護)修飾子によってカバーされるため、protected
は部分的に意味がなく、部分的に冗長です。
private
とprotected
はどちらもネストされたクラスとインターフェースに適用できます(頻繁に適用されます)。
トップレベルのクラスはpublic
またはdefault
にのみアクセスできますが、内部クラスはprivate access
にアクセスできます。
public class TestClassAccess
{
public static void main(String[] args)
{
new TestClassAccess().new TestClassPrivateAccess();
}
private class TestClassPrivateAccess
{
TestClassPrivateAccess()
{
System.out.println("I'm a private class");
}
}
}
トップレベルでのクラス可視性の使用例は2つだけです(a)すべての場所で可視(b)パッケージ内でのみ可視。したがって、2つの修飾子(public
とデフォルト)のみです。 classがpublic
の場合、すべてのクラスに表示されます。アクセス修飾子がない場合は、同じパッケージ内のクラスに対してのみ表示されます。
トップレベルでのクラスの可視性のユースケースが多かった場合、Java言語はより多くの修飾子を提供するでしょう。