-1

そして、なぜ同じことが内部クラスで使用できるのでしょうか?

public class Hello {
    class inner{ // this class can use any modifier
    }
}               
4

4 に答える 4

7

Javaでは、最上位のクラス/インターフェースのみをpublicまたはにすることができpackageます。

JLSのセクション7.6(トップレベルタイプ宣言):

デフォルトでは、aで宣言されたトップレベルの型は、packageそのパッケージのコンパイルユニット内でのみアクセス可能ですが、他のパッケージのコードから型へのアクセスを許可するために、型をパブリックとして宣言できます(§6.6、§8.1.1、 §9.1.1)。

インターフェイス修飾子のJLSのセクション9.1.1には、次のように記載されています。

保護されたアクセス修飾子とプライベートは、直接囲んでいるクラスまたは列挙型宣言内のメンバーインターフェイスにのみ関係します(§8.5.1)。

修飾子staticは、メンバーインターフェイス(§8.5.1、§9.5)にのみ関係し、 トップレベルインターフェイス(§7.6)には関係しません。

これが明確であることを願っています。

于 2012-12-11T07:25:13.600 に答える
1

プライベートトップレベル クラスは、どこからでもアクセスできないため意味がありません。

保護されているとは、外部クラスの同じパッケージまたはサブクラス内のクラスにアクセスすることを意味します.Javaにはパッケージ継承がないため、保護されたクラスも意味がありません.

メソッド/パラメーターをstaticとして宣言すると、オブジェクトのインスタンスを作成せずにアクセスできます。静的メンバーは、クラスまたはオブジェクトのインスタンスではなく、クラス全体に属しているためです。トップレベルのクラスを囲むクラスがないため、トップレベルのクラスを static として定義しても意味がありません。

于 2012-12-11T07:29:59.627 に答える
1

ネストされたクラスは、、、、staticパッケージローカル、privateまたはprotectedpublic

トップレベルのクラスはそうではありません。

  • staticこれでは何の意味もありませんから。 staticネストクラスの場合は、外部クラスへの参照を保持しないことを意味しますが、外部クラスの場合は用途がありません。
  • privateクラスは別のクラス ファイルからアクセスできないため、プライベート トップ レベル クラスにアクセスできませんでした。
  • protectedクラスはサブクラスから使用される可能性がありますが、クラスを作成するabstract方が明確です。私見では。
于 2012-12-11T08:40:16.027 に答える
0

すべてのタイプのアクセス修飾子は、すべてのタイプのclasss (匿名クラスを除く) で使用できます。

他のタイプの修飾子を持つクラスは、メソッドとまったく同じようにアクセスできます。

staticこれは、他のクラスに属していることを意味するため、機能しません。これは、外部クラスには決して当てはまりません。

于 2012-12-11T07:14:43.433 に答える