28

次のようなコード:

protected Interface1 varClass1 = new Interface1() {

しかし、この匿名のネストされたクラスも class を拡張しBaseたいと思います。

protected Interface1 varClass1 = new Interface1() extends Base {
....

これはJavaで可能ですか?

4

2 に答える 2

30

匿名クラスは、厳密に 1 つのインターフェイスを実装するか、1つのクラスを拡張できます。

1 つの回避策は、 を拡張Baseして実装する名前付きクラスを作成しInterface1、それを匿名クラスの基本クラスとして使用することです。

public abstract class Base1 extends Base implements Interface1 {}

...

protected Interface1 varClass1 = new Base1() {
   ...
于 2012-05-07T08:38:21.373 に答える
3

クラスの拡張とインターフェースの実装の両方を行うことはできませんが、おそらく何をすべきかはdelegationを使用して実現できます。

匿名クラスのイニシャライザでのインスタンスを作成し、Baseから実装したメソッドからそのメソッドを使用するだけですInterface1

編集Base:私の答えは、インターフェイスのためではなく、実装のためにのみ継承したいことを前提としています。BaseオブジェクトをInterface1変数に割り当てた後、 のインターフェイスが表示されないことを考えると、これは有効な仮定です。したがって、新しいクラスを作成するのではなく、ここで委任を使用する方がよいと思います。

于 2012-05-07T08:45:33.910 に答える