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().
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;
}
La domanda è: perchè non mi lascia sostituire tutto l'if con:
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!! 

