Dovremmo evitare l'interfaccia multipla se possibile? Poiché penso che nella maggior parte dei casi una classe con più interfacce possa essere sostituita con un'altra versione con composizione e unica interfaccia, ad esempio:
interfaccia multipla:
public class C implements A,B{
@Override
public void a(){
}
public void b(){
}
}
composizione e singola interfaccia:
public class ConcreteA implements A{
@Override
public void a(){
}
}
public class ConcreteB implements B{
@Override
public void b(){
}
}
public class C{
ConcreteA a;
ConcreteB b;
}
e se 2 interfacce hanno parti comuni, posso separare le parti comuni dalla classe originale:
interfaccia multipla:
public class C implements A,B{
@Override
public void a(){
}
@Override
public void b(){
a();
}
}
composizione e singola interfaccia:
public class ConcreteA implements A{
@Override
public void a(){
}
}
public class C implements B{
ConcreteA a;
@Override
public void b(){
a.a();
}
}
E persino implementare serializzabile:
public class C implements A,Serializable{
String name;
int userId;
@Override
public void a(){
}
}
In realtà posso racchiudere la parte Serializable in una nuova classe:
public class CData implements Serializable{
public String name;
public int userId;
}
public class C{
public CData;
public ConcreteA a;
}
Quindi la mia domanda è, dovremmo preferire la composizione su un'interfaccia multipla, vale a dire: limitare la classe per implementare al massimo una sola interfaccia, proprio come preferisce la composizione sull'ereditarietà, se possibile?