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!!