dúvida herança de atributos

7 respostas
gustavobs

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.

:?: :?: :?: :?: :?:

7 Respostas

LPJava

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. :smiley: 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:

package br.com.kym.testes;

class A {
	int x = 10;
}

class B extends A {
	int x = 20;
	
	void testaX(int x) {
		// Shadowing, variáveis com o mesmo nome
		System.out.println(x);
		System.out.println(this.x);
		System.out.println(super.x);
	}
}

public class TestaHeranca {
	
	public static void main(String[] args) {
		
		A a = new B();		
		System.out.println(a.x); // Imprime 10, "x" de "A"
		
		B b = new B();
		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 …

valeu! :smiley:

Criado 19 de novembro de 2008
Ultima resposta 19 de nov. de 2008
Respostas 7
Participantes 3