Skip to content

Conversão de tipos

Conversão implícita

  • compila quando
    • tipo da direita = igual/subtipo da esquerda
void Boo(A a){
    <code>
    if (a instanceof b){
    }
}
  • instanceof
    • operador
    • palavra reservada da linguagem
    • testa se o tipo do objeto referenciado pela variável da esquerda é igual ou subtipo do objeto da direita
  • alteração da projeção de um objeto através de uma nova variável
    • quando se chega à conclusão de que um objeto é compatível, é possível alterar a projeção do objeto através de uma nova variável
    • o nome dessa operação é conversão explícita

Conversão explícita - Casting

  • regras de funcionamento
  • compilar - condições cumulativas
    • tipo do casting é igual ou subtipo do tipo da variável de destino
    • tipo do casting e tipo da variável de origem estão na mesma hierarquia
  • executar - condições cumulativas
    • compilar
    • tipo do casting igual ou supertipo do tipo do objeto referenciado pela variável de origem

Resolução

  • primeiro passo
    • desenhar hierarquia
    • na conversão implícita, não é preciso ter conhecimento do tipo de objeto referenciado
  • identificar hierarquia = apontar dedo para uma classe, percorrer uma linha para cima ou para baixo - se o percurso permitir identificar outra classe, essas classes estão na mesma hierarquia

Image title

// CONVERSÃO IMPLÍCITA
B b = new E(); // OK
D d = b; // X
E e = new E(); // OK
b = e; // OK
e = b; // X
F f = new A(); // X

// CONVERSÃO EXPLÍCITA
A a = new G();
D d  = new D();
B b = new F();
F f = (F) b; // compila e roda - (F) é igual/subtipo F, F e B na mesma hierarquia
G g = (D) a; // não compila - (D) não é subtipo/igual G
B b = (F) d; // não compila - (F) e D não estão na mesma hierarquia
E e = (E) b; // compila e não roda