Java (および Android) では、static class
andfinal class
宣言は何に使用されますか?
私の質問は、静的インスタンスに関するものではなく、次のようなクラス宣言に関するものです。
static class StaticClass {
//variables and methods
}
と
final class FinalClass {
//variables and methods
}
ありがとう、
入れ子になった静的クラス
クラスのメソッドや変数と同様に、ネストされた静的クラスはその外側のクラスに関連付けられます。また、静的クラス メソッドと同様に、入れ子になった静的クラスは、それを囲むクラスで定義されたインスタンス変数またはメソッドを直接参照することはできません。それらは、オブジェクト参照を通じてのみ使用できます。注: ネストされた静的クラスは、他のトップレベル クラスと同様に、その外部クラス (および他のクラス) のインスタンス メンバーと対話します。実際には、入れ子になった静的クラスは、パッケージ化の便宜のために別のトップレベル クラスにネストされたトップレベル クラスの動作です。
ネストされた静的クラスには、外側のクラス名を使用してアクセスします。
OuterClass.StaticNestedClass
たとえば、ネストされた静的クラスのオブジェクトを作成するには、次の構文を使用します。
OuterClass.StaticNestedClass nestedObject =
new OuterClass.StaticNestedClass();
http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
最終クラス
final と宣言されたクラスは、サブクラス化できません。これは、String クラスのような不変クラスを作成する場合などに特に便利です。
http://docs.oracle.com/javase/tutorial/java/IandI/final.html
クラスを final にすると、継承できなくなります。通常、最上位クラスは静的にすることはできませんが、内部クラスは静的にすることができ、ネストされた静的クラスは Javaの外部クラスの静的および最終クラスの参照を必要としません
クラスを final にして、拡張できないようにします。通常、ライブラリを作成している場合 (または大きなプロジェクトの一部に取り組んでいる場合) は理にかなっているため、クライアントはクラスを拡張して既存の動作を変更することができません。あなた自身のプログラムでは、それが大きなプログラムであり、うっかり忘れてしまう可能性がある場合を除いて、クラスを final にする理由はほとんどありません。
静的内部クラスは、外部 (包含) クラスに論理的に属しているが、外部クラスの状態に依存していないもの用です。たとえば、Parser クラスと内部の Parser.Listener クラスを持つことができます。通常、内部クラスを作成することに決めた場合は、最初に静的にして、可能であれば物事を単純化します。
final と static の両方の内部クラスがなくても実行できますが、経験があれば、それらの用途が見つかります。
他のクラスは最終クラスを拡張できません 例 文字列は最終クラスなので、このクラスを拡張することはできません。「最上位」クラスを static と宣言することはできません。修飾子 'static' を持つ内部クラスのみを持つことができます。static 内部クラスは、外部クラスの static メンバーにのみアクセスします
クラスを static とマークすることはできませんか? はい、ネストされたクラスの場合、いいえ、通常のクラスの場合。ネストされたクラスを static とマークすると、classname.staticClassNmae を使用してアクセスするだけで、完全にフラグが設定されたクラスとして機能します。
クラスを final とマークすると、継承できなくなります。Java でのこのStringクラスの良い例です。