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