2012-06-14 3 views
6

非静的な内部クラスをfinalと宣言することは何を意味しますか?最後の内部クラスは何ですか?

Googleでは多くのリンクを試していますが、stackoverflow.comもありますが、それらのすべてが最終的な内部クラスではなく最終メンバーにアクセスする内部クラスについて扱っているようです。 Googleでthisというリンクが見つかりましたが、それについては説明しません。

前もって太もも!

+0

ここをクリックhttp://en.wikipedia.org/wiki/Final_%28Java%29#Final_Classes – user845279

+2

トップレベルのクラスを最終的なものとすることとは何か異なる意味があると思われるのはなぜですか? –

+0

内部クラスはクラスですが、外部クラスのメンバでもあります。それは非継承であろうか、あるいは最終的なために他の振る舞いがあるだろうか? –

答えて

0

最終的に宣言される外部クラスと同じセマンティクスを持ちます。クラスは拡張できません。あなたはAにfinal修飾子を追加する場合は、コンパイルエラーが発生します

public class MyClass { 
    public class A { 
    } 
    public class B extends A { 
    } 
} 

は、この例を考えてみましょう。

+0

thnx!また、どのように私は外のクラスの外から非最終的な内部クラスを拡張するだろうか? 'TestClass extends MyOuter.MyInner' ?? –

+0

TestClassには、MyOuterをとるコンストラクタが必要です。 MyOuterのスーパーメソッドを呼び出します。 –

+0

@SurenderThakran私は、あなたが拡張しようとしている内部クラスが静的である場合にのみ可能だと思います。この[継承マトリックス](http://mindprod.com/jgloss/nestedclasses.html#INHERITANCE)を参照してください。 – user845279

5

トップレベルクラスfinalと内部クラスfinalを作ることに意味の違いはありません。クラスから継承できないことをコンパイラに伝えます。コンパイラーが仮想テーブル参照をスキップできるようにするために、マーキングクラスfinalが時々実行されますが、これはしばしば時期尚早のマイクロ最適化と見なされます。

0

まあ、内部クラスは、そのコンテキストの外部クラスとは全く異なる方法ではありません。したがって、次のコードは完全に有効です。

class Outer { 
int some_member; 

class Inner { 
void method(); 
} 
} 

class OuterExtendsInner extends Outer.Inner{ 

} 

我々はすべて知っているように、クラスの最終宣言の目的は、私たちは、クラスをサブクラスから任意の外部の侵入者を防ぐため、その施設、我々は内部クラスの場合に行うことができます同じように利用するということです。