私たちは常に、例えば、複数のインターフェイスを持つクラスを置き換えることができると思います。各クラスは多くても1つのインターフェイスに含まれている別のバージョンに複数のインターフェイスを実装するすべてのクラスを置き換えることは可能ですか?
public class C implements A,B{
}
、それは(私は聞きたい真実である「私たちができれば...」 、 "もし私たちがすべきなら...")ではなく?
public class C implements A,B{
@override
public void a(){
}
@override
public void b(){
}
}
がvolatingれる単一責任原理ためのいずれか、変更Cが必要)((a)またはbを変更する代わりに、我々:
()は、AからメソッドをオーバーライドC、及びB()Bを検討しますAとBを独立したクラスでラップすることができます:
public class ConcreteA implements A{
@override
public void a(){
}
}
public class ConcreteB implement B{
@override
public void b(){
}
}
public class C{
ConcreteA a;
ConcreteB b;
}
本当ですか?この場合
public class C implements A,B{
@Override
public void a(){
}
@Override
public void b(){
a();
}
}
我々は:
とも、あなたのクラスが2インタフェースを必要と単一責任を持って、それだけで、各クラス内の1つのインタフェースになるために、それを書き換えることは可能である、例えば、オリジナル版それを書き換えることができます:
public class ConcreteA implements A{
@Override
public void a(){
}
}
public class C implements B{
ConcreteA a;
@Override
public void b(){
a.a();
}
}
だから私の質問は、それは我々が多くても1つのインタフェースのみを含むバージョンに2つの以上のインターフェイスが含まれている私たちのクラスのすべてを置き換えることができるというのは本当ですか?
もしそうでなければ、どのような状況でタスクを完了するために複数のインターフェースを実装する必要がありますか?
いいえ、そうではありません。いずれかのインタフェースが 'Serializable'の場合はどうなりますか? –
ところで、あなたの例に基づいて、「2以上」( '> 2')ではなく「少なくとも2」( '> = 2')を意味します。 –
'public class C extends ConcreteAはBを実装しているのですか?Bが定義されている場合、定義にAも実装されていますか?メソッドa()とb()の両方がCクラスのインスタンスからアクセスできるようにしますか? –