0

インターフェイスに興味深い問題があります。この概念を理解するのを手伝ってください。

Itest、Itest3、Itest4の3つのインターフェイスがあります。インターフェイスItestは、Itest3インターフェイスとItest4インターフェイスの両方を拡張します。これらの両方のインターフェースには共通の1つのメソッドがpublic void one();あります。クラスTestはItestインターフェースを実装し、メソッドをオーバーライドします。one()

今、それはどのインターフェースのメソッドを継承しますか?特定のインターフェイスの一般的なメソッドを継承したい場合はどうなりますか。そして、それは多型にどのような影響を及ぼしますか?別のクラスがItest3のみを継承する場合はどうなりますか。これは実行時に壊れると思います。

その利点が何であるかを理解するのを手伝ってください。

コードはここにあります...

public interface ITest extends Itest4,Itest3 {
    public static interface ITest2{

    }
}

public interface Itest3 {
    public void one();
}

public interface Itest4 {
    public void one();
}

public class Test implements ITest {    

    @Override
    public void one() {
        //Which interface method it overrides?
    }

public static void main(String... arg) {
        new Test();
    }

}
4

2 に答える 2

4

答えは:それは問題ではありません。

インターフェイスは単なる宣言であり、コードではありません。どちらのインターフェースもメソッドを宣言しますpublic void one()。このメソッドを実装する実装クラスがある場合、両方のインターフェイスに対して同時に実装します。この実装はclass Test何もオーバーライドしません。初めての導入です。オーバーライドできるインターフェイスには実装がありません。2 つの同一の宣言のみです。

別のクラスが ITest3 を実装する場合、public void one(). ITest4 または ITest を実装する他のクラスと同様です。独自の実装が必要ない唯一のケースは、クラス Test を拡張するクラスがある場合です。これは、Test から実装を継承できるためです。

于 2012-12-19T13:14:18.967 に答える
2

宣言

public interface Itest3 {
    public void one();
}

Itest3 の実装者は、1 という名前のメソッドを提供し、引数を取らず、void を返すと単純に述べています。

まったく同じように

宣言

public interface Itest4 {
    public void one();
}

また、Itest4 の実装者は、1 という名前のメソッドを提供し、引数を取らず、void を返すと述べています。

インターフェイスは、動作の実装に関係なく、単に動作契約を指定するために存在します。したがって、

public class Test implements ITest {    

    @Override
    public void one() {
        //Defines the behavior of both interfaces
    }
}

両方のインターフェースを実装するクラスを定義します。これは、メソッドの実装が両方のインターフェイスの要件を満たしているためです。

于 2012-12-19T13:30:44.053 に答える