Ho letto alcuni post su "composizione sull'ereditarietà", "dove usare la composizione / ereditarietà", "Is-una relazione ..." o "principio di sostituzione di Liskov" per qualche tempo, ma non sono sicuro di ottenere la giusta idea di "composizione sull'ereditarietà".
In alternativa, nella mia esperienza, sembra solo una semplice regola d'oro per verificare se dovremmo usare la composizione o l'ereditarietà:
If a parent class never appears in my codes except in its child class, it should be composition instead of inheritance
per esempio, supponiamo di avere una classe genitore Fruit:
public class Fruit{
public String printName(){
System.out.println("Fruit");
}
}
e classe figlio Orange:
public class Orange extends Fruit{
public String printName(){
System.out.println("Orange");
}
}
e Grape:
public class Grape extends Fruit{
public String printName(){
System.out.println("Grape");
}
}
Se ho davvero bisogno di ereditarietà, nel mio codice sorgente dovrebbe esserci qualcosa di simile
Vector<Fruit> fruitList;
,
Fruit fruit=new Orange();
o
((Fruit)f).printName();
che ha bisogno di "Fruit" per compilare, quindi senza contare Orange e Grape (classe child), se i miei codici sorgente non hanno "Fruit", o se i miei codici possono essere compilati senza "Fruit", Orange e Grape non dovrebbero essere esteso da "Frutto" e quindi dall'eredità errata, è vero?