come mai una superclasse può essere assegnata ad una sottoclasse?
Veramente è il contrario ed il codice, correttamente, fa il contrario. Assegna una sottoclasse ad un oggetto di tipo superclasse.

Un riferimento ad una superclasse può ricevere un oggetto di tipo SottoClasse.
Ed è piuttosto ovvio.

Ad un riferimento di tipo Figura posso passare qualunque Figura (un Triangolo, un Quadrato, un Cerchio, ecc)... sono tutte Figure.

ClasseDerivata estende ClasseBase significa che ClasseDerivata è un ClasseBase, ed è ovvio: un Triangolo è una figura, un Cerchio è una Figura.

Questo è un concetto fondamentale per la programmazione Object Oriented (che deriva dalla realtà, per di più).

Tra parentesi, l'assegnamento non fa cambiare proprio nulla: nulla viene trasformato, semplicemente si fa riferimento ad un oggetto sottoclasse, tramite un "riferimento" di tipo "superclasse". Si ha una visibilità minore dei metodi messi a disposizione, ma non c'è nulla di così strano.


Ciao.