1

これはJavaでの私のシナリオです。

interface I{}
class A implements I{}
class B extends A{}

では、どのクラスがインターフェイスのIメソッドを実装する必要があるのでしょうか。AクラスとBクラスが実装を共有している場合はどうなりますか?よろしくお願いします

4

4 に答える 4

4

class Aではないため、すべての実装を提供する必要がありabstractます。詳しくはこちらをご覧ください。

classB は、これらのメソッドのいずれかまたはすべてをオーバーライドできます。

A(クラスとして) 抽象化すると、インターフェイスでこれらのメソッドにメソッドを提供でき(abstract基本的には として宣言するだけabstract) B、唯一の実装を提供します。

于 2012-10-12T10:59:57.573 に答える
1

1)クラスAは、インターフェイスIのメソッドを実装する必要があります。

2)ただし、クラスBは、必要に応じてこれらの定義をオーバーライドできます。

3)クラスAは、実装されていない場合は抽象として宣言する必要があります。その場合、クラスBはこれらを実装する必要があります。

于 2012-10-12T11:01:44.173 に答える
0

A クラスに I インターフェイスを実装するだけで済みます。必要に応じて、B クラスでその実装をオーバーライドできますが、そうしないと、両方のクラスが同じように動作します (A 実装を使用)。

于 2012-10-12T11:00:24.097 に答える
0

implementsクラスが何らかのインターフェースを実装することを約束すると述べています。extends基本クラスからの実装を再利用できることを述べます。extendsを意味しimplementsます。

したがって、あなたの場合、それAが実装されると約束しましたIB次に、それも実装すると約束しましたが、の実装をベースとしてI使用します。A

それで、あなたのパターンは、ソースとして関係Bするいくつかの実装を共有すると仮定します。これがあなたの望むものならOKです。AA

あなたもすることができます:

1)class B implements Iこの場合の状態はB独自のものになります。

Base2) 次のように、インスタンスのように呼ばれるいくつかの 3 番目のクラスで実装の大部分を保持します。

interface I {}
class Base implements I {}
class A extends Base{}
class B extends Base{}

このようAにしBて、平等な権利になります。

3) 実装を任意のクラスに保持し、集約を使用して装飾することができます。

interface I {
   String method1(String a);
   String method2(String a);
}
class ImplementationHolder1 // does not implement I!
{ 
   String method1impl(String a) {};
}
class ImplementationHolder2 // does not implement I!
{ 
   String method2impl(String a) {};
}

class A implements I {
     ImplementationHolder1 h1;
     ImplementationHolder2 h2;
     String method1(String a) {
         return h1.method1impl();
     };
     String method2(String a) {
         return h2.method2impl();
     };
}

abstractインターフェイスが完全に実装されていない場合は、クラスを作成する必要があることに注意してください。

また、ニーズに合わない場合は、子孫クラスの基本クラスの実装をオーバーライドできます。

于 2012-10-12T11:23:45.573 に答える