Esattamente, per una questione molto semplice:Originariamente inviato da D4rkAng3l
Sostanzialmente in Java se ho una classe Rettangolo con dei metodi ed una sottoclasse Quadrato con gli stessi metodi (ma ridefiniti) della superclasse Rettangolo più un metodo B() definito solo in Quadrato.
Se dichiaro R come Rettangolo ma costruisco l'oggetto come Quadrato e se invoco un metodo cmq definito anche in Rettangolo...allora verrà eseguita la versione ridefinita in Quadrato.
Se invece dichiaro R come Rettangolo, lo costruisco come Quadrato ed invoco il metodo B() definito solo in Quadrato darà errore in fase di compilazione
Dichiarando una variabile come oggetto di un supertipo non significa aver in memoria un oggetto del supertipo, ma solo avere una limitata visibilità sui metodi. Puoi, quindi, utilizzare solo i metodi visibili dal supertipo. Ma il metodo che verrà effettivamente invocato, non dipende dal tipo con cui esso è stato dichiarato, ma dall'effettiva implementazione di quel metodo in memoria (che è sempre quello più vicino all'oggetto reale).
Ciao.![]()