Galera eu estou com uma dúvida aqui.
Me corrijam se eu estiver errado:
Quando queremos fazer um cast nós convertemos um objeto de uma superclasse para uma subclasse, certo ?
Por exemplo:
Tenho uma classe Funcionários que é superclasse da classe Gerentes. Ou seja todo gerente é um funcionário, certo? Se eu quiser, eu posso fazer um cast para que um objeto Funcionario se torne Gerente?
Estou estudando pelo livro core java 2 - Vol.1, e segundo ele há um erro no código abaixo:
Funcionario subordinado = new Funcionario();
Gerente chefe = (Gerente) subordinado;
Não entendi por que o codigo acima não funciona enquanto:
double x = 3.14;
int a = (int) x;
funciona.
Não estou entendendo direito isso não.
Alguém pode ajudar ?
Valeu galera.
Não confunda Cast de objetos com Cast de primitivos.
No caso de Cast de objetos, sempre é possível ir de um subtipo para o tipo, por exemplo:
Gerente g = new Gerente();
Funcionario f = g; // não precisa nem fazer cast
Mas o contrário nem sempre é verdadeiro. Você só pode ir de uma superclasse para a subclasse SE a superclasse contiver um objeto da subclasse.
Funcionario f = new Gerente();
Gerente g = f;
// não compila, pois não se pode colocar uma referencia à superclasse
// numa variavel de objeto da subclasse!
o certo nesse caso é usar o casting
Funcionario f = new Gerente();
Gerente g = (Gerente)f; // compila
Lembrando que esse tipo de conversão pode gerar em runtime um ClassCastException.
Portanto da superclasse para a classe é necessário o cast.
Da subclasse para a superclasse não.
Basta lembrar da regra IS-A (É-UM): todo gerente é um funcionário, portanto pode ser tratado como tal. Mas nem todo funcionário é gerente.
No caso do double sendo convertido para o int isso é possivel, pois com o cast você indica ao Java que você tem ciência da perda de precisão ao converter de double para int.
Além disso, no caso de casting de primitivos vale a regra: do maior para o menor deve ser usado casting.
Espero ter tirado suas duvidas.
1 curtida