[OCPJP6] 017 – Orientação a objetos

Cast

Significa conversão. Mais especificamente em Java, conversão de variável. O cast pode ocorrer em variáveis de objetos e primitivos, para este capítulo vamos ver apenas o cast em objetos. Dividido em downcast e upcast.

downcast

Em downcast a conversão da variável de referência é para baixo na herança, ou seja o cast da variável de referência pode ser declarada apenas para classes específicas, caso contrário não irá compilar. Uma das exceções mais conhecidas ClassCastException (indica que a conversão em tempo de execução está errada) pode acontecer no downcast. Vamos ver alguns exemplos:

package certificacao;
public class Homem { public void correr(){} }
public class Menino extends Homem { public void brincar(){} }

No exemplo abaixo irá ocorrer um ClassCastException em tempo de execução, porque a instância da variável de referência “homem” é Homem e não Menino. O compilador aceita o cast (downcast) porque Menino é um Homem, mas em execução “homem” não é um Menino e então ocorre o erro.

// ...
Homem homem = new Homem();
Menino menino = (Menino) homem;

No próximo exemplo ocorrerá um erro de compilação porque não existe uma herança (generalização -> especialização).

// ...
Animal animal = new Animal();
Menino menino = (Menino) animal;

upcast

Bem mais simples, o upcast é o contrário do downcast e acontece implicitamente. Vamos ver alguns exemplos:

// ...
Menino menino = new Menino();
Homem homem = menino;

Acessando métodos

Os métodos visíveis das variáveis são referentes ao tipo. Masssss nada impede de acessar um método de uma especialização. Vamos ver alguns exemplos:

// ...
Menino menino = new Menino();
Homem homem = menino;
homem.correr(); // visível
homem.brincar(); // NAO COMPILA
((Menino)homem).brincar(); // AGORA SIM =D

Comentem, estendam o assunto… Compartilhem =)