2016-12-23 3 views
-1

私は2つの基底クラスと、1つの基底クラスを継承するサブクラスと、もう一方のクラスを拡張する内部クラスを持つサブクラスを持っています。内部クラスが外部クラスのスーパークラスを拡張するのはなぜですか?これを行う方法はありますか?

ベース・クラス:

public class B1 {} 

public class B2 {} 

サブクラス:

public class A extends B1{ 

    class B extends B2{} 

} 

方法:

execute(B1 b) { 
    ..do something 
} 

コール:

A a = new A(); 

A.B inner = a.new B(); 

execute(inner); 

これは失敗しています。内部クラスは外部クラスのスーパークラスを拡張しないのですか?外部クラスのコンストラクタを呼び出すための内部クラスコンストラクタの方法はありますか?ノー

A.B inner = A.getInner(); 
+0

現時点では、内部クラスインスタンスを作成するときに、外部クラスインスタンスが既に存在する必要があります。どのような工事を期待できますか? – kan

+0

それは本当に良い点です。私が内部クラスのインスタンスを返すサブクラスで静的メソッドを持っていたとしたら、違いはありますか? – Dhruba

+2

丸穴を通して現在の四角形のペグを強制する方法ではなく、達成しようとしていることを簡単に説明する方が良いと思います。あなたは何をしようとしていますか?あなたは解決策として内部クラスを試していますか? – Bobulous

答えて

0

いいえ、内部クラスは外部クラスのスーパークラスを拡張できません。

あなたは、複数の継承ルールを迂回したいというコメントを明確にしました。 Javaクラスは複数の継承を直接サポートしていませんが、Java 8はインターフェイスに対してdefault methodsを導入しました。これは、特定の状況で多重継承の願いを満たす可能性があります。

+0

ありがとう、これは有益でした。 – Dhruba

5

、およびJavaはありません。

public class A extends B1{ 

    static B getInner() { 
     return new B(); 
    } 

    static class B extends B2{} 

} 

コール静的メソッドへ: は静的メソッドで

B() { 
    super(); 
    A()/outer(); 
} 

変更(..今失敗)このような何かを言います多重継承。したがって、内部クラスが外部クラス(または外部クラスのスーパークラス)を拡張した場合、class B extends B2{}は不正です。

関連する問題