2012-03-27 6 views
1

内部クラスが非静的である必要がある理由は、内部クラスが内部クラスのジェネリックへのアクセスを必要とするためです。Javaで非静的な内部クラスを拡張することはできますか?

ありがとうございます。

+3

を内部クラスを拡張することができます

class Alpha { class Beta () { } } class Gamma extends Alpha . Beta { // important to get the constructor right or else the whole thing fails Gamma (Alpha alpha) { alpha . super () ; } } 

あなたが試してみました? –

答えて

8

静的でない内部クラスを囲むインスタンスの外側から拡張したいと考えています。あなたはまた、元囲むクラス内

class OuterParent 
{ 
    class InnerParent { } 

    class InnerChild1 extends OuterParent { } 
} 

を内部クラスを拡張したり、元囲むクラスを拡張し、子クラスで

class OuterChild extends OuterParent 
{ 
    class InnerChild2 extends OuterParent { } 
} 
+1

可能です。クレイジーコンストラクタ。おそらく、行なわれるべきではないが、行うことができる。 –

+0

うわー!私はそれを試して、それは動作したが、あなたは正しい - それは行われるべきではない。 – emory

+0

ありがとう!私の問題はコンストラクタにあった。これはまさに私が必要としていたものです。 – klyngbaek

3

はい、可能です。これは、囲むクラスのメンバーにアクセスできるようになります。

+0

例を挙げてください。 'Outer'、' Outer.Inner'、 'DerivedFromInner'を持っていれば、' DerivedFromInner'から 'Outer'メンバーに継承を通してアクセスする方法はありません。 – kd8azz

+0

@ Ryan試しましたか? emoryの答えの最初の2つの例はそれを可能にします。 – trutheality

+0

@truthality確かに、私は持っています。 Alphaに 'protected int a;'を追加し、ガンマで 'Alpha.this.a'を使ってアクセスしようとすると、 'Alpha型の包含可能なインスタンスはスコープ内でアクセスできません'というメッセージが表示されます。おそらく、私はそれに間違ってアクセスしています。 – kd8azz

関連する問題