[Dúvida] Sombreamento

4 respostas
D

Fala Galera! Eu estou estudando java e estou com uma dúvida nas seguintes classes:

public class A{


    public int x=10;


}
public class B extends A{

  public int x;

}
public class Teste{


public void main (String [] args){


B b=new B();

A a=b;

a.x=4;
System.out.println(a.getClass() ); // Class B ???

System.out.println(a.x);  //4 
}


}

Minha pergunta é porque eu consigo alterar o valor de x da classe A se o objeto (a) tem o endereço do objeto (b) e quando faço a.getClass(); ele me retorna Class B
ou seja o objeto (a) pertence agora a classe B.Como isso é possível ??? A referencia a superclasse fica guardada em algum lugar?? Mesmo sabendo que B extends
A e possui x de A.

4 Respostas

drsmachado

1 - B estende de A, logo, quando faço A a = b a JVM entende que houve um downcasting implícito.
2 - Quando faço a.x = qualquer valor eu estou determinando que o x que é atributo de B seja valorado com o valor informado por mim e não o de A.

D

Fala drsmachado blz!

Então se B estende A B posui XA e XB certo! ou seja a classe B possui dois atributos como o mesmo nome. mais como é possível se (a) e são iguais (b) quando eu faço a=b e quando e pegunto a classe de a.getClass() ele retorna B. como a maquina virtual sabe que ela vai alterar o valor do x que foi herdado de A e não o x de B a referencia a super classe fica guardade em algum lugar? É isso que estou me apertando. :roll:

AndreLuisOnLine


Então se B estende A B posui XA e XB certo! ou seja a classe B possui dois atributos como o mesmo nome.

Olá. Não tem como uma classe possuir 2 atributos com o mesmo nome. Quando vc solicita o atributo X da classe B a jvm busca esse atributo na classe B. Caso não exista ela procura na superclasse de B, nesse caso é a classe A. Se o atributa X existir em B ela nem vai buscar em A.

E

Uma forma simples de você entender como funciona o “sombreamento” de membros é que ele se comportam “mais ou menos” como se fosse o caso da sobreposição de métodos estáticos.

Criado 13 de junho de 2012
Ultima resposta 13 de jun. de 2012
Respostas 4
Participantes 4