Achei q nao tinha mais duvidas com relação a herança quando errei uma questão em que:
a classe A tem variaveis de instancia int x = 5.
a classe B estende A e tb declara variavel int x = 7 ( 1o: nao sabia q podia re-declarar a variavel ja que B recebe de A a variavel x.)
e se tu cria um objeto B mas com variável de refencia A, quando tu printa x ele escreve o valor da referencia e nao do objeto, no caso 5.
sim! Ele vai sempre chamar primeiro da referencia ate pq as variaveis nao sao subscritas por isso que acontece isso! nao há relacao entre a variavel x de A e de B. Apenas uma pura semelhança que há variaveis com o mesmo nome nas classes.
gustavobs
valeu…
mas como iniciante acho isso um pouco estranho…
LPJava
ham ram será estranho sim, e há mais coisas estranhas a vim, pode acreditar! eh normal. bons estudos!
gustavobs
achei q nao tivesse mais duvidas sobre herança, ja to em outro estudo, assuntos bem mais avançados, mas essa agora me deixou na duvida sobre herança.
me deu um nó agora, o conceito q eu tinha ta incompleto hehe
gustavobs
eu achei q quando tu herdava um atributo aquele atributo fazia parte da classe…como se fosse declarado…
e mesmo que referenciado pela super classe, em runtime ele iria ler o atributo do objeto…
mas ele lê o dá referencia…
:? :? :?
Fabio_Kym_Nascimento
É só você lembrar do seguinte: Não existe herança de variáveis de instância (nem sobrescrita). O que existe é a possibilidade das classes filhas terem acesso as variáveis de instância da classe mãe (se o modificador de acesso da variável permitir), mas elas não são herdadas, as variáveis de instância são sempre da classe que a declarou!
Quando você declara uma variável de instância em uma classe filha com o mesmo nome de uma da classe mãe, você está usando uma técnica chamada shadowing.
Esse código é simplinho de tudo, mas ajuda a fixar:
packagebr.com.kym.testes;classA{intx=10;}classBextendsA{intx=20;voidtestaX(intx){// Shadowing, variáveis com o mesmo nomeSystem.out.println(x);System.out.println(this.x);System.out.println(super.x);}}publicclassTestaHeranca{publicstaticvoidmain(String[]args){Aa=newB();System.out.println(a.x);// Imprime 10, "x" de "A"Bb=newB();System.out.println(b.x);// Imprime 20, "x" de "B"b.testaX(30);// Imprime 30 (argumento), 20 (x de B), 10 (x de A)}}
Resumindo: Quando você ver uma impressão ou uso de uma variável de instância, sempre olhe para o tipo da referência.
gustavobs
boa, saquei!!
na verdade eu achei q quando que se herdava as variaveis de instancia, na verdade qm estende só tem acesso a variavel de instancia da superclasse …