Questão de Java Básico

2 respostas
wagnerlegiao

Preciso da ajuda de vocês, me respondam e expliquem a seguinte questão, pois não entendi direito:
What will happen when you attempt to compile and run the following code?

class HelSte{
String nat="dub";
	public void jume(){

		System.out.println("HelSte");
	
	}

}


public class HarMol extends HelSte{
String nat="uk";
	public static void main(String argv[]){

		HarMol hm = new HarMol();
		hm.go();
	
	}
	public void jume(){

		System.out.println("HarMol");
	}

	public void go(){
		HelSte hs = new HarMol();
		hs.jume();
		System.out.println(hs.nat);

	}
}

Ele imprime " HarMol " seguido de "dub "
mas realmente não entendi porque imprime “dub” e não “uk”… alguém poderia me ajudar?

2 Respostas

B

Campos são sempre baseados no tipo declarado, e não no tipo em execução, ou seja, são sempre estáticos(o mesmo acontece com métodos estáticos). Não existe sobrescrita de campos (e métodos estáticos) em Java.

R

Quando vc entra no método go() ele cria um objeto

HelSte hs = new HarMol();

“HelSte hs” significa uma váriavel de referencia a HelSte
new HarMol();” significa o objeto que esta sendo criado, este prcesso é um exemplo de polimorfismo.

Na execução a VM sempre chamara os métodos da váriavel de referencia que neste caso é o valor da variavel que esta na classe HelSte.

Falo…

Criado 11 de setembro de 2008
Ultima resposta 11 de set. de 2008
Respostas 2
Participantes 3