Casting

Disponível somente no TrabalhosFeitos
  • Páginas : 7 (1682 palavras )
  • Download(s) : 0
  • Publicado : 8 de novembro de 2012
Ler documento completo
Amostra do texto
20121323 - Rodolfo Placido Siqueira
TI 1°Ano - “conversões de Casting”
Casting
A operação de casting é usada quando se quer converter
tipos de dados em uma expressão. Esse tipo de conversão
só é possível quando os tipos de dados são tipos
compatíveis entre si. Tai tipos tanto podem ser primitivos
como objetos.
up cast: variável de tipo menos especifico recebe
valor/referencia da variávelde tipo mais especifico.
É realizado implicitamente, ou seja, não precisa colocar o
tipo menos especifico entre parênteses
down cast: variável de tipo mais especifico recebe
valor/referencia da variável de tipo menos especifico.
Precisa ser realizado explicitamente, ou seja, precisa
colocar o tipo menos especifico entre parênteses
Lembrando que com o down cast de objetos, não se perdenada pois a variável sempre recebe uma referencia.
Agora com o down cast de tipos primitivos, quando a
variável mais especifica contiver um valor maior que a
magnitude da variável menos especifica, esse valor será
truncado.
20121323 - Rodolfo Placido Siqueira
TI 1°Ano - “conversões de Casting”
Regras de Cast
Conversões de tipos no Java podem ser um pouco confusas, pois temos
regras paratempo de compilação e de execução. Por exemplo, temos
duas classes:
1. public class Veiculo {
2.
3. public static void main(String[] args) {
4.
5. }
6.
7. }
8.
9. class Carro extends Veiculo {
10.
11.
12. }
Um dos casos mais comuns é a conversão ampliadora ou upcasting, onde
um tipo mais genérico pode referenciar outro mais específico (um
subtipo):
1. Veiculo v = new Carro();
Temosuma variável de referência do tipo Veiculo que aponta para um
objeto do tipo Carro. Sabemos que o contrário não pode ser feito e
causa erro de compilação, porque Carro É-UM
Veiculo, mas Veiculo NÃO-É-UM Carro.
A conversão ampliadora é totalmente segura, não causará erros de
compilação nem execução. E também não exige nenhuma declaração
explícita. Simplesmente fazemos a referência e ocompilador entenderá
que é seguro uma variável do tipo Veiculo referenciar um objeto Carro,
pois Veiculo pode fazer coisas que Carro faz. Isso porque Carro herdou
estes comportamentos. Na verdade Carro pode fazer ainda mais coisas,
porém como Veiculo não sabe dessas coisas, esse tipo de conversão
limita os comportamentos de Carro. Agora somente métodos
de Veiculo podem ser chamados. Lembre-se que avariável de
referência é quem diz quais métodos poderão ser chamados.
20121323 - Rodolfo Placido Siqueira
TI 1°Ano - “conversões de Casting”
Vamos continuar e ver uma conversão redutora, ou downcasting:
1. Carro c = v;
Veja que estamos indo pra baixo na árvore de herança agora. Tentamos
fazer com que a variável de referência do tipo Veiculo (usada
anteriormente para referenciar Carro),seja atribuída a outra variável
do tipo Carro, fazendo com que as duas apontem para o mesmo objeto.
Um pouco confuso mas veja como funciona:
Antes fizemos isto:
Veiculo -> Carro
Agora estamos tentando isto:
Carro = Veiculo -> Carro
Essa conversão não pode ser feita implicitamente, como no upcasting. O
código anterior não compila, mas como sabemos que a variável v aponta
pra um objeto do tipoCarro, podemos fazer a conversão
explicitamente:
Carro = (Carro)Veiculo -> Carro
Isto é:
1. Carro c = (Carro)v;
Isto funcionou porque v faz referência a um objeto Carro. Então é
seguro a referênciaVeiculo para Carro. Lembre-se que o tipo de objeto
sendo refenciado é que determina se a conversão poderá ser feita. Mas
e se o objeto referenciado não fosse Carro? Agora fica interessanteporque o compilador lava suas mãos. Portanto, o seguinte
código vai compilar:
1. Veiculo v1 = new Veiculo(); //Objeto Veiculo
2.
3. Carro c1 = (Carro)v1;
20121323 - Rodolfo Placido Siqueira
TI 1°Ano - “conversões de Casting”
Mas como o que estamos tentando fazer é isto:
Carro = (Carro)Veiculo -> Veiculo!!
Quando executamos o código, a seguinte mensagem será exibida:
Exception in thread...
tracking img