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 .