Non nel senso che intendi tu.Originariamente inviato da Downloader
Intanto grazie per la risposta.
Però temo di non aver capito bene quello che vuoi dire.
Se io con il cast forzo java a vedere un oggetto A come se fosse di un altro tipo (B) allora non dovrei poter usare solo e soltanto i metodi della classe B?
Forzando a vedere un oggetto B come se fosse di tipo A, quello che ottieni è "limitare l'utilizzo" di B con i soli metodi esposti da A. Questo non significa che utilizzi i metodi di A, ma che utilizzi solo i metodi che A espone.
Il tuo oggetto rimane sempre di tipo "Classe2", ma, castandolo a "Classe1" ne limiti l'utilizzo ai soli metodi che vengono esposti dalla classe "Classe1". Quindi puoi utilizzare il metodo metodo() in quanto esso è presente anche nella classe "Classe1". Ma essendo che Classe2 ha anch'essa un metodo chiamato metodo() viene invocato quello, perchè più vicino all'oggetto su cui stai operando. E questo è corretto dal punto di vista logico.
Se vogliamo fare un esempio in senso lato, utilizzando gli animali, possiamo ipotizzare di avere una classe generica "Animale" dalla quale vengono derivate le classi "Topo" e "Balena".
La classe "Animale" espone il metodo muoviti() che verrà implementato in modo differente da Topo e da Balena.
Ma se tu hai un oggetto di tipo Balena e lo casti ad Animale, non puoi pretendere che, invocando muoviti(), la balena si metta a camminare, anche se a livello di Animale hai definito lo spostamento come una camminata... la balena (anche se vista come Animale) nuoterà.
Ciao.![]()