Innanzitutto, grazie per la risposta. A livello pratico, come faccio a capire cosa scriverà? Non riesco a capire da dove prende i metodi (se nella classe madre o in quelle figlie) e in base a cosa!
Innanzitutto, grazie per la risposta. A livello pratico, come faccio a capire cosa scriverà? Non riesco a capire da dove prende i metodi (se nella classe madre o in quelle figlie) e in base a cosa!
Ok, prendiamo es.
f1.macedonia(f2);
Compilazione:
1) Per il compilatore f1 è di tipo Frutto. Non ha importanza (il compilatore non osserva questo) che tu hai assegnato a f1 un oggetto Mela. Il compilatore "guarderà" solo le firme dei metodi in Frutto.
2) L'argomento è f2, di tipo Frutto. Idem anche qui il compilatore non osserva il fatto che a f2 hai assegnato un oggetto Arancia.
3) Esiste in Frutto un unico metodo "macedonia" che è in grado di ricevere un Frutto? Sì, c'è. Questo basta affinché "compili".
Runtime:
1) Viene eseguito il metodo "macedonia" per l'oggetto realmente istanziato. Visto che f1 referenzia un Mela e visto però che Mela NON ridefinisce macedonia(Frutto), il metodo realmente eseguito è comunque quello di Frutto.
2) La concatenazione con this fa eseguire il toString() dell'oggetto realmente istanziato. Che è Mela, quindi la prima stringa è "Mela".
3) La concatenazione con f fa eseguire il toString dell'oggetto realmente istanziato assegnato a f. Che è Arancia, quindi la seconda stringa è "Arancia".
Ultima modifica di andbin; 21-09-2014 a 16:34
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet