Ma quindi il cast verso l'alto è del puntatore all'oggetto, non dell'oggetto vero e proprio. Voglio dire, se mi dicono che faccio un upcasting, io intendo che l'oggetto Cane diventa Animale, quindi essendo Animale, perdo le implementazioni definite nella classe Cane. In alcune guide è scritto che facendo upcasting si perdono caratteristiche definite nella classe derivata..Originariamente inviato da alka
A runtime, quando il metodo viene invocato, il tipo di oggetto con cui si ha a che fare viene verificato; trattandosi di un oggetto di tipo Cane, è l'implementazione di questa classe ad essere invocata.
Questo consente di memorizzare nel riferimento qualsiasi oggetto sia di tipo Animale o appartenente ad una classe discendente e, invocando un metodo, ottenere l'esecuzione dell'implementazione specifica fornita dalla classe di appartenenza.
Ma questo controllo non si può fare anche senza tali metodi? Magari in maniera meno diretta, ma non vedo perchè non possa controllare un valore senza usare metodi get e set
L'uso di metodi get e set consente di regolare l'accesso a questi campi, che rappresentano lo stato complessivo del tuo oggetto, e garantire che tale stato rimanga consistente, nel caso specifico impedendo all'oggetto "client" che utilizza l'istanza di memorizzare un valore negativo per l'età, inserendo il controllo della validità del valore da impostare nel metodo di set, generando un'eccezione in caso di errore oppure lasciando il valore precedentemente memorizzato.
![]()