Cast

Oi

Eu estou iniciando em java, e tenho algumas dúvidas no cast.
Por exemplo neste caso (int)3,45, vai devolver a parte inteira que é 3, mas no cast do objecto, o que vai devolver?
E qual o objectivo de fazer um cast de um objecto?

Obrigado

Nellaf,

O conteúdo de variáveis de referência (referenciam os objetos), ou seja, seus bits armazenados, é apenas um ponteiro para o objeto que permanece em heap. Este casting, na verdade, não altera os bits contidos na variável de referência, mesmo porque a localização do objeto em heap não é alterada, e sim informa que o objeto deve ser tratado por uma variável de referência de outro tipo, qual é o motivo disso? o compilador verifica qual é o tipo da variável de referência para saber quais membros de classe podem ser utilizados por esta.

[quote=Rizzo]Nellaf,

O conteúdo de variáveis de referência (referenciam os objetos), ou seja, seus bits armazenados, é apenas um ponteiro para o objeto que permanece em heap. Este casting, na verdade, não altera os bits contidos na variável de referência, mesmo porque a localização do objeto em heap não é alterada, e sim informa que o objeto deve ser tratado por uma variável de referência de outro tipo, qual é o motivo disso? o compilador verifica qual é o tipo da variável de referência para saber quais membros de classe podem ser utilizados por esta.

Att. Thiago Rizzo.

[/quote]

Por exemplo, tenho uma classe Animal(superclasse) e outra classe Ave(subclasse):

Animal animal = new Animal[50]
...
for (int i = 0; animal.length; i++) {
      if (animal[i] instanceof Ave){
        Ave ave = (Ave) animal[i];

o que é que o cast(Ave) vai fazer e devolver?

Obrigado

Quando você tem uma variável de tipo primitivo como int, o conteúdo desta variável é exatamente os bits relativos ao seu conteúdo. As variáveis de referência contém os bits relativos ao endereço onde o objeto reside na área de memória heap, similar ao conceito de ponteiros. Portanto se você fizer algo como:

Animal animal1 = new Ave();

animal1 é uma variável de referência e seu conteúdo, ou seja, os bits armazenados é o endereço onde este novo objeto reside em heap. Aí você vai me perguntar: qual é a diferença de manter uma referência do tipo Animal ou Ave, em relação ao conteúdo das variáveis, NADA! pois se eu fizer algo como:

Animal animal1 = new Ave();
Ave ave1 = (Ave) animal1;

O conteúdo de ambas as variáveis será o mesmo, pois referenciam o mesmo objeto em heap, mas o que você pode utilizar deste objeto depende de sua referência. Uma referência do tipo Animal, pode apenas invocar métodos relacionados à classe Animal deste objeto, mesmo que o objeto seja do tipo Ave. Portanto, quando você faz o casting, você apenas diz que sabe que o objeto é do tipo Ave, e quer utilizar uma referência deste tipo para poder utilizar todas suas funcionalidades, tanto de Animal quanto de Ave.

Obrigadão, era mesmo que eu queria saber…