Newsgroup: it.comp.java
Titolo: Casting

Mi potete spiegare esaurientemente cosa vuol dire fare casting?

 Mi potete spiegare esaurientemente cosa vuol dire fare casting?
Da un oggetto definito in questo modo:
ClasseBase c = new ClasseEstesa();
Tu puoi accedere a tutti i metodi e le proprietą definite in ClasseBase.
Se vuoi trattare c come una ClasseEstesa devi dire al compilatore di
trattarla come tale e cioč:
if(c instanceof ClasseEstesa){
ClasseEstesa e = (ClasseEstesa) c;
}
Ti posto un esempio ma ti consiglio di leggerti un tutorial anche perchč
il discorso č strettamente legato all'ereditarietą.
public class ProvaCasting{
	public static void main(String[] args){
		ClasseBase c = new ClasseEstesa();
		// non facendo il cast posso usare solo i metodi e le proprietą definiti
nella classe base
		// anche se di fatto ciņ che viene eseguito č l'implementazione del
metodo all'interno della classe (se esiste)
		c.stampa();
		c.faiQualcosa();
		c.anotherMethod();
		// Questo non compila
//		c.metodoNuovo();
		// fine errore
		// facendo il cast posso usare i metodi e le proprietą definiti nella
classe estesa
		if(c instanceof ClasseEstesa)
			((ClasseEstesa)c).metodoNuovo();
	}
}
abstract class ClasseBase{
	public void stampa(){
		System.out.println("Metodo della classe base");
	}
 
	public void anotherMethod(){
		System.out.println("Questo metodo non č stato implementato");
	}
 
	public abstract void faiQualcosa();
}
class ClasseEstesa extends ClasseBase{
	public void stampa(){
		System.out.println("Metodo della classe estesa");
	}
	public void faiQualcosa(){
		System.out.println("Implementazione metodo astratto");
	}
	public void metodoNuovo(){
		System.out.println("Questo metodo esiste solo nella classe estesa");
	}
}
Spero di non averti fatto confusione ...
ciao
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Mi potete spiegare esaurientemente cosa vuol dire fare casting?
Esaurientemente e' una parola grossa...comunque ci provo...
Significa convertire esplicitamente il tipo di una variabile o di una
espressione.
Utilizzare l'operatore di casting () e' obbligatorio se la conversione
puo' comportare una perdita di informazione e, per le variabili di tipo
reference, nel caso dei downcast.
Ad esempio:
long l = 15;
int i = 24;
Se assegno a l il valore di i, non ho bisogno di avere un cast esplicito,
dato che la conversione non comporta alcuna perdica, anche potenziale, di
informazione (una variabile di tipo long puo' sempre contenere il valore
contenuto in una variabile di tipo int).
l = i;
Viceversa, se voglio assegnare a i il valore di l, dovro' indicare la
conversione esplicitamente, dato che potenzialmente avro' una perdita di
informazione (non e' detto che il valore contenuto in l possa essere anche
contenuto in i):
i = (int)l;
Per le variabili di tipo reference, il cast deve essere indicato
esplicitamente nel caso dei downcast (conversione ad un reference di una
sottoclasse). Il motivo e' che non e' detto che questa conversione abbia
sempre senso: ha senso solo se l'oggetto indicato e' effettivamente del
tipo della sottoclasse (o di una sua sottoclasse).
Ad esempio, se Gatto e' una sottoclasse di Animale.
Animale a = new Gatto();
Gatto g = (Gatto)a;
In questo caso tutto va bene.
Se pero' a non indica un oggetto di tipo Gatto, la conversione del
reference potrebbe generare a run-time una ClassCastException:
Animale a = new Cane();
Gatto g = (Gatto)a; //....ClassCastException
Nel caso degli upcast il problema non si pone, dato che sono sempre
possibili, e non e' richiesto un cast eplicito:
Gatto g = new Gatto();
Animale a = g;
Bada bene che e' la variabile di tipo reference che viene convertita, non
l'oggetto, che rimane invece sempre dello stesso tipo di cui e' stato
creato.
Spero che la mia spiegazione ti possa essere d'aiuto.
Prova anche a dare un'occhio alla JLS:
http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#20232
-- 
Lucio Benfante
Brainbench MVP for Java 1
http://www.brainbench.com
MyTranscript: 
http://www.brainbench.com/transcript.jsp?pid=167064

 Mi potete spiegare esaurientemente cosa vuol dire fare casting?
Cambiare esplicitamente il tipo statico di una variabile.
-- 
Fighting for peace is like fucking for virginity
ObjectZone - 
http://space.tin.it/computer/csadun