A dire il vero, se il metodo "peso()" è definito nella classe Oggetto, non serve affatto fare tutto quel casino... :
codice:for(Oggetto o : p) { tot += o.peso(); }
Questo codice funziona tranquillamente (è la base del polimorfismo).
Inoltre, non vedo perchè tu non possa usare l'operatore ternario "?" nel modo che hai descritto. Quell'istruzione è perfettamente valida (ma, come già detto, inutile).
La terza domanda è più "complessa"... se tu sei sicuro che tutti gli oggetti "Oggetto" si dividono in istanze di "Libro" e istanze di "Regalo", non ci sono problemi e il test nell'else lo puoi tranquillamente saltare... se, al contrario, vi sono altre classi che estendono "Oggetto" e non hai la certezza che tutte le istanze di quell'array siano dei due tipi descritti, allora potresti incorrere in un ClassCastException nel caso tu provassi a castare un oggetto ad una classe che non c'entra nulla.
Ciao.![]()