Scusami, ho fatto un po' di confusione io e ho detto qualche minchiata (ho letto di fretta durante un deploy)
A:
B:codice:public class Erbivoro<E extends Erba> implements Cibo, Animale<E> { public void mangia(E e) { } }
La differenza tra A e B è checodice:public class Erbivoro implements Cibo,Animale<Erba> { public void mangia(Erba erba) { } }
in A tu costruisci un erbivoro dicendogli cosa mangerà. E mangerà solo quello
Quindi
Erbivoro<Mele> e = new Erbivoro<Mele>();
e.mangia(new Mele()); // OK
e.mangia(new Pere()); // NO!
In B invece l'oggetto da mangiare lo passi direttamente a mangia() quindi puoi fare:
e.mangia(new Mele()); // OK
e.mangia(new Pere()); // OK!
(sempre restando su sottoclassi di Erba)
Spero di non aver scritto minchiate, sono fuso oggi .-.


Rispondi quotando