
Originariamente inviata da
Alex'87
Scusami, ho fatto un po' di confusione io e ho detto qualche minchiata (ho letto di fretta durante un deploy)
A:
codice:
public class Erbivoro<E extends Erba> implements Cibo, Animale<E> {
public void mangia(E e) { }
}
B:
codice:
public class Erbivoro implements Cibo,Animale<Erba> {
public void mangia(Erba erba) { }
}
La differenza tra A e B è che
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 .-.