Ciao a tutti! Volevo porvi una domanda su una cosa che non capisco.
Ho una classe astratta Oggetto e due sottoclassi Regalo e Libro.
La classe Oggetto dispone di un metodo peso, che restituisce il peso dell'oggetto, metodo definito nelle sottoclassi.
In un'altra Classe Scatola posso aggiungere degli oggetti di tipo Regalo e Libro.
La classe Scatola ha al suo interno due metodi: pesoTotale() e numeroOggetti().
La domanda è: perchè non mi lascia sostituire tutto l'if con:codice:Class Scatola {.. campi, metodi... numeroOggetti() [ //tutto ok, non mi dà problemi, restituisco l'indice degli elementi inseriri } pesoTotale(){ double tot=0; (for Oggetto o:p) //dove p è l'array degli oggetti inseriti //DOWNCAST PER UTILIZZARE IL METODO peso() if (o instanceof Regalo){ tot += ((Regalo)o).peso(); } else if (o instance of Libro){ tot += ((Libro)o).peso(); } return tot; }
tot += (o instanceof Regalo) ? ((Regalo)o).peso() : ((Libro)o).peso();
?? Grazie
p.s. Un'altra domanda, forse stupida. Una volta che controllo se o è un'istanza di regalo, se è vera, bene. Nel'else devo per forza mettere il controllo sull'istanza di Libro? Perchè?
Grazie!!![]()