Em programação de computadores, typecasting refere-se a tomar um objeto de um tipo e convertê-lo em um objeto de outro tipo. Em Java 6 , isso geralmente , mas nem sempre, envolve tanto upcasting ou downcasting , o que significa converter um objeto para cima ou para baixo na hierarquia de herança. Instruções 
 um 
 Copie o seguinte classes Java em um arquivo de texto em branco. Estes são a classe que será usada para o tutorial : 
 
 public class Pessoa {} 
 
 public class MalePerson estende Pessoa {} 
 2 
 Cole o seguinte upcast : 
 
 Pessoa p = new MalePerson ( "Tom" ); 
 
 a classe MalePerson é uma subclasse de Pessoa, por isso este é um elenco acima da hierarquia . Upcasting é o tipo mais fácil de elenco de retirar. Java simplesmente sabe o que fazer quando uma subclasse é atribuído a um dos seus antepassados. Faça uma nota mental, no entanto : Java vai sempre lembrar o que um objeto é realmente durante uma eleve. Mesmo agora que o MalePerson "Tom" foi atribuído a um objeto pessoa genérica, Java lembra que esse objeto é realmente uma MalePerson 
 3 
 Cole o seguinte abatido : . 
 
 Pessoa p = new MalePerson ( "Tom" ); 
 
 MalePerson m = ( MalePerson ) p; 
 
 downcasts como esta, que se move para baixo da hierarquia, exigem que o programador para especificar o tipo de classe sendo utilizado para a conversão em parêntesis . No entanto, downcasting é mais complexa do que fazendo um upcast 
 4 
 Tente o seguinte abatido : 
 
 Pessoa p = new Pessoa ( "Jane" ); 
 
 MalePerson m = . ( MalePerson ) p; 
 
 Esta tentativa falhar , e isso não deve ser difícil perceber porquê. Embora seja razoável supor que um MalePerson é uma pessoa, não é razoável que o computador para assumir que todas as pessoas são MalePersons . Alguns podem ser FemalePersons , e a diferença pode ou não ser trivial para os propósitos do computador . Apenas para ser seguro , o programa gera um erro . 
 
 A abatido só pode ocorrer se um upcast ocorreu primeiro , razão pela qual o upcast no Passo 3 foi válido, mas não no Passo 4. Isso pode tornar upcasting soar inútil à primeira vista. Ele levanta a questão de por que o upcast foi realizada , em primeiro lugar , mas mantenha esse pensamento 
 5 
 Considere o seguinte método: . 
 
 Public void greet ( Pessoa p ) { 
 
 if ( p instanceof MalePerson ) { 
 
 MalePerson m = ( MalePerson ) p; 
 
 m.doMaleThings (); } 
 
 else if ( p instanceof FemalePerson ) { 
 
 FemalePerson f = ( MalePerson ) p; 
 
 f.doFemaleThings (); } else 
 
 lançam novo GenderConfusionException ( ); } 
 
 
 
 o escritor deste método tem nenhuma maneira de saber com antecedência se este método será chamado com uma MalePerson ou um objeto FemalePerson , então ele usa o objeto Pessoa genérico. Em seguida , ele usa o comando instanceof para sondar a Pessoa dado e veja se ele deveria downcast -lo como um homem ou uma pessoa do sexo feminino .