Dúvida

8 respostas
gabrielmelo

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]

8 Respostas

Rage

qual é a pergunta da questão?

acredito que seja o que o código imprime.

Pq vc não tenta rodar esse programa?

ViniGodoy

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.

LPJava

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:

derheimen

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

renan_java

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

LPJava

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

gabrielmelo

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

LPJava

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

Criado 16 de fevereiro de 2007
Ultima resposta 23 de fev. de 2007
Respostas 8
Participantes 6