そして、なぜ同じことが内部クラスで使用できるのでしょうか?
public class Hello {
class inner{ // this class can use any modifier
}
}
そして、なぜ同じことが内部クラスで使用できるのでしょうか?
public class Hello {
class inner{ // this class can use any modifier
}
}
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)には関係しません。
これが明確であることを願っています。
プライベートトップレベル クラスは、どこからでもアクセスできないため意味がありません。
保護されているとは、外部クラスの同じパッケージまたはサブクラス内のクラスにアクセスすることを意味します.Javaにはパッケージ継承がないため、保護されたクラスも意味がありません.
メソッド/パラメーターをstaticとして宣言すると、オブジェクトのインスタンスを作成せずにアクセスできます。静的メンバーは、クラスまたはオブジェクトのインスタンスではなく、クラス全体に属しているためです。トップレベルのクラスを囲むクラスがないため、トップレベルのクラスを static として定義しても意味がありません。
ネストされたクラスは、、、、static
パッケージローカル、private
またはprotected
public
トップレベルのクラスはそうではありません。
static
これでは何の意味もありませんから。 static
ネストクラスの場合は、外部クラスへの参照を保持しないことを意味しますが、外部クラスの場合は用途がありません。private
クラスは別のクラス ファイルからアクセスできないため、プライベート トップ レベル クラスにアクセスできませんでした。protected
クラスはサブクラスから使用される可能性がありますが、クラスを作成するabstract
方が明確です。私見では。すべてのタイプのアクセス修飾子は、すべてのタイプのclass
s (匿名クラスを除く) で使用できます。
他のタイプの修飾子を持つクラスは、メソッドとまったく同じようにアクセスできます。
static
これは、他のクラスに属していることを意味するため、機能しません。これは、外部クラスには決して当てはまりません。