Qual a saída?

4 respostas
Ironlynx

dado o código:

class Ocultar { static String metodo() { return "O Melhor grupo de Java do Brasil!"; } String nome() { return "Java"; } } class Herdeira extends Ocultar { static String metodo() { return "Rulez!"; } String nome() { return "GUJ!"; } } class Test { public static void main(String[] args) { Ocultar o = new Herdeira(); System.out.println(o.nome() + "-" + o.metodo()); } }

Qual será a saída?-Justifique sua resposta!

4 Respostas

L

Resultado

Pq foi criado uma instancia do objeto Herdeiro e por isso a chamada do metodo “nome()” retorna “GUJ!”,
No caso da chamada do metodo “metodo()” retorna de acordo com a classe Ocultar por ser estático, um método de classe,
a chamada o.metodo() é equivalente a Ocultar.metodo()

flw

Rafael_Nunes

Eu acredito que será “Guj - Rulez!”, pois a variável de referência o, faz referência a uma instância da classe Herdeira, que substituiu o método metodo().

Rafael_Nunes

Ooops, fiz o teste e é realmente o que ele falou : “Guj- O melhor grupo de Java do Brasil!”.

Valeu, aprendi mais uma…

Ironlynx

Certo lap_junior!
o.nome();faz uma chamada em tempo de execução(late binding-ligação tardia) a Classe de o,que é Herdeira,mas a chamada a o.metodo,faz uma associação ao tipo de o(que é Ocultar)),em tempo de compilação,pois o método metodo é estático(o chamado early binding ou ligação prematura).

Criado 8 de abril de 2004
Ultima resposta 9 de abr. de 2004
Respostas 4
Participantes 3