Ovviamente il tipo specifico è sempre quello istanziato, quindi hai un Triangolo (solo che lo vedi attraverso un riferimento a Figura).Originariamente inviato da _SC_
non capisco il senso però.
Tu dici :
ho un riferimento figura.
gli passo un triangolo.
Ho sempre una figura oppure ho un triangolo?
Ma al di là di questo... fa qualche differenza? Un triangolo è una figura. Se ho un triangolo, automaticamente ho anche una figura.
Esatto, perchè stai usando un riferimento di tipo Figura.Se faccio un getClasse ottengo un triangolo. Però non posso usare i metodi triangolo ma solo quelli di figura.
Questo è il brutto delle guide/manuali/corsi. Non c'è nessuno che faccia un esempio chiaro e utile. Quel tipo di scrittura non lo userai mai perchè è perfettamente inutile.allora qual'è il senso di permettere questo assegnamento, a livello pratico??
Se penso di avere un triangolo e cerco di usarlo come un triangolo non ci riesco..
![]()
Supponi di dover scrivere una classe che inserisce dentro ad un file le aree di diverse figure. Questa classe avrà un metodo che riceve la figura e salva nel file l'area calcolata di quella figura. Hai due possibilità:
1) Scrivere una classe con un metodo per ciascun tipo di figura. Quindi, un metodo che riceve un Triangolo, un metodo che riceve un Quadrato, un metodo che riceve un Cerchio, ...
2) Scrivere una classe con un solo metodo che riceve un oggetto Figura.
La soluzione 1 è dispendiosa oltre ogni immaginazione e non è nemmeno scalabile. Se domani io mi invento un particolare tipo di figura, non ho un metodo di quella classe pronto a ricevere il mio oggetto e sono fregato.
La soluzione 2 è la normalità: me ne frego di quale tipo specifico di Figura mi abbiano passato... io ne uso il metodo getArea() (che è della classe Figura e che ciascuna figura ha ridefinito opportunamente con la propria formuletta).
Questo grazie all'ereditarietà: se facessi il getClass() di quell'oggetto "f" dentro al metodo mi verrebbe restituita la classe esatta dell'oggetto passato, ma a me non interessa nulla.codice:public void salvaAreaNelFile(Figura f) { // Non mi interessa sapere che tipo di figura... // Può essere un Triangolo, un Quadrato, un Cerchio o un Trapezio // ma essendo un oggetto Figura, sicuramente ha il metodo getArea() Double area = f.getArea(); ... // Salvo l'area nel file } ... Triangolo t = new Triangolo(); Cerchio c = new Cerchio(); Rettangolo r = new Rettangolo(); salvaAreaNelFile( t ); salvaAreaNelFile( c ); salvaAreaNelFile( r );
E ho invocato sempre lo stesso metodo, passandogli di volta in volta l'oggetto desiderato.
Ciao.![]()



Rispondi quotando