Fórum O que é Casting #565468
26/10/2011
0
David Toreli
Curtir tópico
+ 1Post mais votado
26/10/2011
TipoEspecifico variavelEspecifica= (TipoEspecifico) variavelGenerica;
A
|
+--+--+
| |
B_1 B_2
| |
C_1 C_2
|
D_1
// declarar e inicializar uma variavel de cada tipo A a = new A(); B_1 b1 = new B_1(); B_2 b2 = new B_2(); C_1 c1 = new C_1(); C_2 c2 = new C_2(); D_1 d1 = new D_1();
// criar variaveis do tipo A e referenciar objetos ja existentes A a1 = a; // perfeitamente valido, afinal o objeto "a" é do tipo A, então pode ser referenciado pela a variavel "a2" A a2 = b1; // também é valido pois todo objeto do tipo B_1, é uma extensão do tipo A A a3 = b2; // idem A a4 = c1; // idem A a5 = c2; // idem A a6 = d1; // idem
// criar variaveis do tipo B_1 e referenciar objetos ja existentes B_1 b3 = b1; // perfeitamente valido, afinal o objeto "b1" é do tipo B_1, então pode ser referenciado pela a variavel "b3" B_1 b4 = c1; // todo objeto do tipo "C_1" é também um objeto do tipo "B_1" B_1 b5 = d1; // idem
// criar variavel do tipo C_1 e referenciar objeto ja existente C_1 c2 = c1; // perfeitamente valido, afinal o objeto "c1" é do tipo C_1, então pode ser referenciado pela a variavel "c2"
// declarar uma variavel do tipo mais generico: o tipo A A variavelGenerica; // inicializar essa variavel com o tipo C_1 variavelGenerica= new C_1();
// declarar uma variavel do tipo mais generico: o tipo A A variavelGenerica; // inicializar essa variavel com o tipo C_1 variavelGenerica= new C_1(); // invocar o metodo "fazAlgo" variavelGenerica.fazAlgo(); // vai dar erro de compilação, pois a variavel é do tipo A e na classe A nao existe o metodo "fazAlgo"
// declarar uma variavel do tipo mais generico: o tipo A A variavelGenerica; // inicializar essa variavel com o tipo C_1 variavelGenerica= new C_1(); // declarar uma variavel especifica C_1 variavelC1; // inicializar a variavel especifica com o objeto do tipo generico variavelC1 = variavelGenerica; // Opa, continua dando erro de compilação, afinal, o compilador nao tem como adivinhar que a variavel do tipo A tem uma referencia ao tipo C_1
// declarar uma variavel do tipo mais generico: o tipo A A variavelGenerica; // inicializar essa variavel com o tipo C_1 variavelGenerica= new C_1(); // declarar uma variavel especifica C_1 variavelC1; // inicializar a variavel especifica com o objeto do tipo generico /* * O cast, nada mais é, do que colocar entre parenteses o tipo de dado especifico * que sabemos que esta sendo referenciado pela variavel de tipo generico */ variavelC1 = (C_1) variavelGenerica; // Agora sim, estamos dizendo pro compilador que a variavel do tipo A tem uma referencia a um objeto do tipo C_1 // finalmente podemos invocar o metodo especifico da classe C_1 variavelC1.fazAlgo();
David Toreli
Gostei + 3