これは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ます。詳しくはこちらをご覧ください。
classB は、これらのメソッドのいずれかまたはすべてをオーバーライドできます。
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です。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インターフェイスが完全に実装されていない場合は、クラスを作成する必要があることに注意してください。
また、ニーズに合わない場合は、子孫クラスの基本クラスの実装をオーバーライドできます。