Dúvida

Fala galera,

estou estudando para a prova scjp, e estou fazendo o simulado do whizlabs, fiquei com duvida nessa questão. Alguém pode me explicar?

public class Test {

	public static void main(String[] args) {
		
		Base b = new Subclass();
		System.out.println(b.x);
		System.out.println(b.method());

	}

}

public class Base {
	
	int x = 2;
	int method()
	{
		return x;
	}

}

public class Subclass extends Base {
	
	int x = 3;
	int method(){
		return x;
	}

}

[]´s
Gabriel

[color=red]Mensagem do moderador: Ao postar codigos utilize as tags [ code ]. [/color]

qual é a pergunta da questão?

acredito que seja o que o código imprime.

Pq vc não tenta rodar esse programa?

Oi, seja bem-vindo ao forum.
Reserve um tempo para ler esse artigo, sobre como postar código e usar recursos do fórum de maneira correta:
http://www.guj.com.br/posts/list/50115.java

A resposta é 2 e 3.
Com atributos, assim como com métodos static, o Java não faz sobrecarga nem sobrescrita, mas sim sobreposição. O que acontece é que ambos os atributos existem, cada um no seu escopo.

A classe de baixo verá apenas o seu x, enquanto a de cima verá seu x.

Quando você manda imprimir b.x, você está mostrando o x de Base, conforme indica a referência com a qual o Java encara o objeto:
Base b = new SubClass();

O x, que estava escondido, passa a ser revelado.

Entretanto, quando você evoca method(), quem processará o corpo do método é a subclasse. Isso devido a sobrecarga do método. A subclasse, retorna então o valor de seu próprio x, indicando o valor 3.

a resposta eh 2 3 eu fiz essa questao no whilabs lembre-se que variaveis nao sao herdadas apenas os metodos… qualquer duvida consulte o capitulo 2 ou eh o 5 da kathy ela fala sobre essas pegadinhas :smiley:

camilolopes, acho que vc esta confundindo as coisas…
É claro que as variaveis são herdadas.

Em herança as classe filhas herdam da classe Pai todos os métodos exceto os marcados como private, assim como herdam também todas as variáveis de instância exceto as marcadas como private. Não esqueçam de considerar o modificador de acesso quando falarem desse assunto, pois isso sim pode ser uma pegadinha.

Abraços

po… acho q me confudi mesmo… vivendo e aprendendo… achava q apenas os metodos era herdado e as variaveis nao…

Valeu pela força galera, agora sim eu entendi. A explicação do whizlabs não estava clara. Como diz o camilolops, vivendo e aprendendo.

[]´s

hehe gabriel essa questao tb me tomou um certo tempo tb!!