Grazie a entrambi!
Quindi per il downcasting non c'è bisogno di tutto quel codice perchè lo fa in "automatico", ok.
Il problema è che, ad esempio in una classe Tester, utilizzando il metodo pesoTotale(), mi restiuisce in fase di esecuzione quell'errore se scrivo semplicemente o.peso(), mentre va tutto bene se faccio tutto il casino postato sopra.