非静的内部クラスを として宣言するとはどういう意味final
ですか?
私はgoogleとstackoverflow.comでも多くのリンクを試しましたが、それらはすべて、最終的な内部クラス自体ではなく、最終的なメンバーにアクセスする内部クラスを扱っているようです。Googleでこのリンクを見つけましたが、それでも説明していません。
事前にサンクス!
非静的内部クラスを として宣言するとはどういう意味final
ですか?
私はgoogleとstackoverflow.comでも多くのリンクを試しましたが、それらはすべて、最終的な内部クラス自体ではなく、最終的なメンバーにアクセスする内部クラスを扱っているようです。Googleでこのリンクを見つけましたが、それでも説明していません。
事前にサンクス!
final
トップレベル クラスの作成と内部クラスの作成の間に意味上の違いはありませfinal
ん。クラスから継承できないことをコンパイラに伝えます。クラスのマーキングfinal
は、コンパイラが仮想テーブルのルックアップをスキップできるようにするために行われることがありますが、これは多くの場合、時期尚早のマイクロ最適化と見なされます。
final と宣言されている外部クラスと同じセマンティクスを持ちます。クラスは拡張できません。
次の例を検討してください。
public class MyClass {
public class A {
}
public class B extends A {
}
}
final 修飾子を A に追加すると、コンパイル エラーが発生します。
その文脈では、内部クラスは外部クラスと何の違いもありません。したがって、次のコードは完全に有効です。
class Outer {
int some_member;
class Inner {
void method();
}
}
class OuterExtendsInner extends Outer.Inner{
}
誰もが知っているように、クラス final を宣言する目的は、内部クラスの場合と同じように、外部の侵入者がクラスをサブクラス化し、その機能を悪用するのを防ぐことです。