Ich muss Gebühren für Kunden verwalten. Ich habe eine Klasse namens Due gemacht. Es speichert Gebühren für zwei Arten von Kunden X, Y. Es geht so.Sollte ich Klassenvererbung verwenden oder nicht?
public abstract class Due {
private CustomerType customerType; //can be either X or Y
protected DueType dueType;
private String dueId;
private BigDecimal dueAmount;
private Date dueDate;
public Due(CustomerType type) {
this.customerType = type;
}
//getters , setters goes here.
}
Auch DueType sind für X und Y. So habe ich eine Schnittstelle namens DueType und Aufzählungen XDueType, YDueType implementiert es geschafft.
public interface DueType {
}
public enum XDueType implements DueType {
A, B;
}
public enum YDueType implements DueType {
C, D;
}
Und ich habe zwei verschiedene Klassen, jeweils speziell für X und Y fällig. Gefällt Ihnen dieses
public class XDue extends Due {
public XDue() {
super(CustomerType.X);
}
public XDueType getDueType() {
return (XDueType) this.dueType;
}
}
public class YDue extends Due {
public YDue() {
super(CustomerType.Y);
}
public YDueType getDueType() {
return (YDueType) this.dueType;
}
}
habe ich auf Due unabhängig von ihrer Art, die eine Vielzahl von Operationen zu tun (Diese Operationen werden für gleich sein XDue oder YDue).
Meine Frage ist, sollte ich Vererbung hier oben verwenden oder nicht. Ich hätte nur eine Klasse machen können Due nur. Das hätte einfach den Job für mich erledigen können. Aber die frühere Methode erscheint mir semantisch korrekter. Auch vorwärts gehen XDue, YDue kann weniger ähnlich werden. Daher denke ich, dass es besser ist, sie von jetzt getrennt zu halten. Hab ich recht?
Mögliche Duplikat (http: // Stackoverflow.com/questions/49002/prefer-composition-over-vererbung) – MaxG
Warum haben Sie eine leere Schnittstelle ohne abstrakte Methoden erstellt? – Logan
Dies kann nicht ohne die semantische Information beantwortet werden, wie XDue und YDue unterscheiden, wie sie? – IceFire