web-dev-qa-db-ja.com

プライベートクラスの宣言

可能性のある複製:
Java:最上位クラスをプライベートとして定義できるのはなぜですか?

private外部クラスを宣言できないのはなぜですか?内部プライベートクラスを持つことができる場合、なぜ外部プライベートクラスを持つことができないのでしょうか...?

21
T__

プライベート外部クラスは、何もアクセスできないため、役に立ちません。

詳細を見る:

Java:最上位クラスをプライベートとして定義できるのはなぜですか?

20
Amit

質問に答えるには:

内部プライベートクラスを持つことができる場合、なぜ外部プライベートクラスを持つことができないのでしょうか...?

区別できるのは、内部クラスが「クラス」アクセスレベルにあり、「外部」クラスが「パッケージ」アクセスレベルにあることです。 Oracle Tutorials から:

クラスに修飾子がない場合(デフォルト、package-privateとも呼ばれます)、そのパッケージ内でのみ表示されます(パッケージは関連クラスの名前付きグループです。後のレッスンでそれらについて学習します)。

したがって、package-private(修飾子なしの宣言)は、「外部」クラスprivateの宣言から期待される効果であり、構文はまったく異なります。

10
stevebot

private修飾子は外部からクラスにアクセスできないようにするので、この利点はありません。それが違法であり、publicabstractfinalが許可されています。

注:protectedにすることはできません。

あなたはできる。

package test;

public class Test {
    public static void main(String[] args) {
        B b = new B();
    }
}

class B {
  // Essentially package-private - cannot be accessed anywhere else but inside the `test` package
}
3
OldCurmudgeon

privateクラスは使用できませんが、secondクラスは使用できます。

public class App14692708 {
    public static void main(String[] args) {
        PC pc = new PC();
        System.out.println(pc);
    }
}

class PC {
    @Override
    public String toString() {
        return "I am PC instance " + super.toString();
    }
}

また、static内部クラスは、名前がOuterClass.InnerClassであることを除いて、個別のクラスと区別できません。したがって、「クロージャ」を使用したくない場合は、静的内部クラスを使用します。

1
Suzan Cioc

privateは、クラスが宣言されているクラスにのみアクセスできるようにします。クラス全体をプライベートにすると、外部から誰もクラスにアクセスできなくなり、クラスが役に立たなくなります。

内部クラスは、外部クラスが内部クラスにアクセスできるため、外部クラスを非公開にすることができます。外部クラスは、外部クラスを非公開にする場合には当てはまりません。

0
Prabhakar