Dúvidas e Exemplos CAST [Resolvido]

Galera,
estou tendo dificuldades para enteder a parte de casting do java.
Li em alguns artigos e livros, mas quando vou fazer algum exercicio sobre o assunto eu travo.

fiz esse pequeno trecho de código:

class Veiculo{}
class Carro extends Veiculo{}

public class Principal{
	public static void main(String[] args) {
		Veiculo v = new Veiculo();
		Carro c = new Carro();
		Veiculo vc = new Carro();		
	}
}	

Se possivel gostaria que vocês escrevessem as maneiras como podemos fazer cast, gostaria que tivesse os exemplos com upcast e downcast.
Colocar também os exemplos que não vão compilar e os que vão lançar um ClassCastException

Talvez esteja pedindo demais, mas é que estou tendo muita dificuldade nessa parte, valeu.

[quote=charlesbraw]Galera,
estou tendo dificuldades para enteder a parte de casting do java.
Li em alguns artigos e livros, mas quando vou fazer algum exercicio sobre o assunto eu travo.

fiz esse pequeno trecho de código:

class Veiculo{}
class Carro extends Veiculo{}

public class Principal{
	public static void main(String[] args) {
		Veiculo v = new Veiculo();
		Carro c = new Carro();
		Veiculo vc = new Carro();		
	}
}	

Se possivel gostaria que vocês escrevessem as maneiras como podemos fazer cast, gostaria que tivesse os exemplos com upcast e downcast.
Colocar também os exemplos que não vão compilar e os que vão lançar um ClassCastException

Talvez esteja pedindo demais, mas é que estou tendo muita dificuldade nessa parte, valeu.[/quote]

Nesse seu exemplo todos sao validos.

Da uma olhada aqui:

http://www.guj.com.br/posts/list/213992.java

evertonsilvagomesjava,

Na verdade essa parte:

[quote]Veiculo v = new Veiculo(); Carro c = new Carro(); Veiculo vc = new Carro(); [/quote]

eu entendo perfeitamente,

o que não sei fazer é ler esse tipo de conversão:

Veiculo v2 = (Carro)v; Veiculo v3 = (Veiculo)c; Carro c2 = (Veiculo)c;

Sei que alguns casos da Erro de ClassCastException, alguns não compilam, outros são downcasting e upcasting.

Gostaria de aprender a fazer esse cast de objetos e saber seu funcionamento.
valeu.

[quote=charlesbraw]evertonsilvagomesjava,

Na verdade essa parte:

[quote]Veiculo v = new Veiculo(); Carro c = new Carro(); Veiculo vc = new Carro(); [/quote]

eu entendo perfeitamente,

o que não sei fazer é ler esse tipo de conversão:

Veiculo v2 = (Carro)v; Veiculo v3 = (Veiculo)c; Carro c2 = (Veiculo)c;

Sei que alguns casos da Erro de ClassCastException, alguns não compilam, outros são downcasting e upcasting.

Gostaria de aprender a fazer esse cast de objetos e saber seu funcionamento.
valeu.[/quote]

Então cara, esses exemplos são exatamente as mesmas coisas.

Quando vc faz:

Veiculo v2 = (Carro)v // A variavel de referencia "v" contém uma referencia para um objeto Veiculo. Nesse caso seria o mesmo que: Carro c = (Carro)new Veiculo(). Porém um Veiculo não É-UM Carro, por isso gera um ClassCastException
Veiculo v3 = (Veiculo)c; // Aqui sua variavel de referencia "c" contém uma referencia para um objeto Carro. Seria o mesmo que: Veiculo v3 = (Veiculo) new Carro(). Aqui é valido o uso do polimorfismo porque um Carro É-UM Veiculo.
Carro c2 = (Veiculo)c; // Aqui sua variavel "c" possui uma referencia para um objeto Carro, vc precisa definir um casting para Carro antes de atribuir e a sintaxe ficaria assim: Carro c2 = (Car) (Veiculo)c,  porque um objeto Veiculo pode nao ser um objeto Carro. Vamos alisar o primeiro casting, que por sinal é um upcasting, (Veiculo)c seria mesma coisa se fizermos: Veiculo c = (Veiculo) new Car(). Neste caso á variavel "c" passa no teste É-UM tanto para Car quanto para Veiculo devido ao uso de polimorfismo. Após isso é feito um segundo casting, onde ocorre um downcasting Carro c2 = (Car)(Veiculo)c. Note que como á variavel "c" passa no teste É-UM tanto para Veiculo quanto para Car devido ao primeiro casting, então é valido fazer esse segundo downcasting (Car)(Veiculo), e á atribuição é correta, sem gerar ClassCastException.   

hummmm,
agora consegui capturar a idéia, fiz até alguns métodos aqui para testar.

Valeu mesmo.