次のようなコード:
protected Interface1 varClass1 = new Interface1() {
しかし、この匿名のネストされたクラスも class を拡張しBase
たいと思います。
protected Interface1 varClass1 = new Interface1() extends Base {
....
これはJavaで可能ですか?
匿名クラスは、厳密に 1 つのインターフェイスを実装するか、1つのクラスを拡張できます。
1 つの回避策は、 を拡張Base
して実装する名前付きクラスを作成しInterface1
、それを匿名クラスの基本クラスとして使用することです。
public abstract class Base1 extends Base implements Interface1 {}
...
protected Interface1 varClass1 = new Base1() {
...
クラスの拡張とインターフェースの実装の両方を行うことはできませんが、おそらく何をすべきかはdelegationを使用して実現できます。
匿名クラスのイニシャライザでのインスタンスを作成し、Base
から実装したメソッドからそのメソッドを使用するだけですInterface1
。
編集Base
:私の答えは、インターフェイスのためではなく、実装のためにのみ継承したいことを前提としています。Base
オブジェクトをInterface1
変数に割り当てた後、 のインターフェイスが表示されないことを考えると、これは有効な仮定です。したがって、新しいクラスを作成するのではなく、ここで委任を使用する方がよいと思います。