私の他の質問に少し関連しています:次の違いは何ですか:
private class Joe
protected class Joe
public class Joe
class Joe
繰り返しますが、最後の 2 つの違いは、私が最も興味を持っていることです。
私の他の質問に少し関連しています:次の違いは何ですか:
private class Joe
protected class Joe
public class Joe
class Joe
繰り返しますが、最後の 2 つの違いは、私が最も興味を持っていることです。
パブリック クラスは、任意のパッケージ内のクラスにアクセスできます。
デフォルト アクセス ( class Joe
) を持つクラスは、同じパッケージ内の他のクラスにのみ表示されます。
private および protected 修飾子は、内部クラスにのみ適用できます。
プライベート クラスは、それを囲んでいるクラス、および同じ囲んでいるクラス内の他の内部クラスからのみ可視です。
保護されたクラスは、同じパッケージ内の他のクラス、および外側のクラスを拡張するクラスから見えます。
詳細については、 JLSを参照してください。
デフォルト アクセスを持つクラスには、宣言の前に修飾子がありません。
デフォルトのアクセス権を持つクラスは、同じパッケージ内のクラスによってのみ表示されるため、デフォルトのアクセス権はパッケージ レベルのアクセス権です。
クラスにデフォルトのアクセス権がある場合、別のパッケージのクラスはそのクラスのインスタンスを作成できず、変数や戻り値の型を宣言することさえできません。コンパイラは文句を言います。例えば:
package humanity;
class Person {}
package family;
import humanity.Person;
class Child extends Person {}
この 2 つのソースをコンパイルしてみてください。ご覧のとおり、これらは異なるパッケージにあり、コンパイルは失敗します。