これはJavaでの私のシナリオです。
interface I{}
class A implements I{}
class B extends A{}
では、どのクラスがインターフェイスのIメソッドを実装する必要があるのでしょうか。AクラスとBクラスが実装を共有している場合はどうなりますか?よろしくお願いします
これはJavaでの私のシナリオです。
interface I{}
class A implements I{}
class B extends A{}
では、どのクラスがインターフェイスのIメソッドを実装する必要があるのでしょうか。AクラスとBクラスが実装を共有している場合はどうなりますか?よろしくお願いします
class A
ではないため、すべての実装を提供する必要がありabstract
ます。詳しくはこちらをご覧ください。
class
B は、これらのメソッドのいずれかまたはすべてをオーバーライドできます。
A
(クラスとして) 抽象化すると、インターフェイスでこれらのメソッドにメソッドを提供でき(abstract
基本的には として宣言するだけabstract
) B
、唯一の実装を提供します。
1)クラスAは、インターフェイスIのメソッドを実装する必要があります。
2)ただし、クラスBは、必要に応じてこれらの定義をオーバーライドできます。
3)クラスAは、実装されていない場合は抽象として宣言する必要があります。その場合、クラスBはこれらを実装する必要があります。
A クラスに I インターフェイスを実装するだけで済みます。必要に応じて、B クラスでその実装をオーバーライドできますが、そうしないと、両方のクラスが同じように動作します (A 実装を使用)。
implements
クラスが何らかのインターフェースを実装することを約束すると述べています。extends
基本クラスからの実装を再利用できることを述べます。extends
を意味しimplements
ます。
したがって、あなたの場合、それA
が実装されると約束しましたI
。B
次に、それも実装すると約束しましたが、の実装をベースとしてI
使用します。A
それで、あなたのパターンは、ソースとして関係B
するいくつかの実装を共有すると仮定します。これがあなたの望むものならOKです。A
A
あなたもすることができます:
1)class B implements I
この場合の状態はB
独自のものになります。
Base
2) 次のように、インスタンスのように呼ばれるいくつかの 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
インターフェイスが完全に実装されていない場合は、クラスを作成する必要があることに注意してください。
また、ニーズに合わない場合は、子孫クラスの基本クラスの実装をオーバーライドできます。