2

実装のために次のことが可能かどうか疑問に思っていました:

2 つのインターフェイスがあり、それぞれに 1 つの関数ヘッダーがあるとします。 たとえば、iterface1 には関数 g(...) があり、interface2 には関数 f(...) があります。

ここで、クラスを作成し、このクラスがこれら 2 つのインターフェイスを実装していることを宣言します。クラスでは、次のことを試みます。

関数 g(...) の実装を開始し、その実装で、interface2 を実装するローカル クラスを作成し、このクラスに f(...) の実装を追加します。

4

3 に答える 3

4

私はあなたが何を意味するのかよくわかりません。私はこのようなものを描いています:

interface Interface1
{
    public void g();
}

interface Interface2
{
    public void f();
}

class MyClass implements Interface1, Interface2
{
    @Override
    public void g()
    {
        class InnerClass implements Interface2
        {
            @Override
            public void f()
            {
            }
        }
    }
}

そうですか?

この場合、答えはノーです。内部クラス ( ) は問題なく動作しますが、外部クラスInnerClassの実装としてカウントされません。fあなたはまだ実装する必要がありfますMyClass

MyClass.java:11: MyClass is not abstract and does not override abstract method
f() in Interface2
于 2011-04-13T11:09:21.833 に答える
2

はい、合法です。ただし、内部クラスが実装しているため、クラスはインターフェイスを実装しません。クラスは、インターフェイスを明示的に実装するか、自身を抽象として宣言する必要があります。

于 2011-04-13T11:08:12.703 に答える
1

はい、合法です。あなたが示した例では、クラスは両方のインターフェースのすべてのメソッドを実装する必要があり、ローカル クラスは interface2 のすべてのメソッドを実装する必要があります。

于 2011-04-13T11:08:23.253 に答える