Sobre esse casting aqui, ao olhar achei que dava ClassCastException, mas nao dá porque?
[code]public class Veiculo {
int numVeiculo;
public void go(){
	
	System.out.println("Veiculo");
	
}
}[/code]
[code]package com.certificação.polimorfismo;
public class Car extends Veiculo{
int numCar;
public void go(){
	
	System.out.println("Car");
	
}
public static void main(String[] args) {
	
	Car c = new Car();
	Car c2;
			
	c2 = (Car)(Veiculo)c; // Aqui á variavel de ref "c" aponta para um objeto Car, "c" faz um casting para "Veiculo", válido pq "Car" é um "Veiculo", depois de fazer esse casting para "Veiculo" faz outro para "Car" como um "Veiculo" não é um "Car", porque não gera um ClassCastingException?
	
	
}
}
[/code]
essa me deixou com dúvida.
         
        
          
        
           
           
           
         
         
            
            
          
       
      
        
        
          O cast leva em consideração o tipo que está dentro da variável.
Você fez um upcast e depois um downcast.
Geralmente, você só precisa fazer casting no segundo caso (de Veiculo para Car), pois é uma operação perigosa. Como você mesmo constatou, pode ser que o Veiculo não seja necessariamente um Car.
         
        
        
           
           
           
         
         
            
            
          
       
      
        
        
          [quote=ViniGodoy]O cast leva em consideração o tipo que está dentro da variável.
Você fez um upcast e depois um downcast.
Geralmente, você só precisa fazer casting no segundo caso (de Veiculo para Car), pois é uma operação perigosa. Como você mesmo constatou, pode ser que o Veiculo não seja necessariamente um Car.[/quote]
Mas nesse caso Veiculo não é um Car, quando ocorre o downcast de Veiculo para Car pq não gera á exceçao? Não entendi  
 .
         
        
        
           
           
           
         
         
            
            
          
       
      
        
        
          Você confunde variáveis (que contém referências a objetos) com objetos.
A classe de um objeto não se altera mesmo que o objeto seja submetido a um cast, que serve apenas para revelar uma “identidade” que esse objeto já tem.
Uma “identidade” de um objeto seria, por exemplo, alguma interface que é implementada pela classe desse objeto, ou então uma superclasse da classe desse objeto.
Se um objeto é do tipo Carro (que estende Veículo), ele sempre será um Carro, mesmo que referenciado por uma variável do tipo Veículo.
         
        
        
           
           
           
         
         
            
            
          
       
      
        
        
          Puts nao tinha enchergado rs, quando ocorre Veiculo c = (Veiculo) new Car(); á variavel “c” passa no teste instanceof tanto para Car quanto para Veiculo, isso que esta acontecendo ai, né?
         
        
        
           
           
           
         
         
            
            
          
       
      
        
        
          Sim.
Como o entanglement falou, por mais que a variável de referência seja um veículo, o veículo que está sendo apontado por ela é um carro. E não deixará de ser carro nunca mais.
Por isso você pode testar se o veículo que está sendo apontado é uma instância de carro.
         
        
        
           
           
           
         
         
            
            
          
       
      
        
        
          [quote=ViniGodoy]Sim.
Como o entanglement falou, por mais que a variável de referência seja um veículo, o veículo que está sendo apontado por ela é um carro. E não deixará de ser carro nunca mais.
Por isso você pode testar se o veículo que está sendo apontado é uma instância de carro.[/quote]
Entendi perfeitamente  :D. Muito Obrigado!!