Classe Interna?

5 respostas
antonioedirane

Não entendi muito bem esta questão que peguei em um teste.

Click the Exhibit button.

10. interface Foo {
11. int bar();
12. }
13.
14. public class Beta {
15.
16. class A implements Foo {
17. public int bar() { return 1; }
18. }
19.
20. public int fubar( Foo foo) { return foo.bar(); }
21.
22. public void testFoo() {
23.
24. class A implements Foo {
25. public int bar() { return 2; }
26. }
27.
28. System.out.println( fubar( new A()));
29. }
30.
31. public static void main( String[] argv) {
32. new Beta().testFoo();
33. }
34. }


Respostas:
A. Compilation fails.
B. The code compiles and the output is 2.
C. If lines 16, 17 and 18 were removed, compilation would fail.
D. If lines 24, 25 and 26 were removed, compilation would fail.
E. If lines 16, 17 and 18 were removed, the code would compile and
the output would be 2.
F. If lines 24, 25 and 26 were removed, the code would compile and
the output would be 1.

Fiz os testes e a resposta correta é BEF.
Está certo mas a minha dúvida é a seguinte.
Porque a “class A” no método testfoo() não entra em conflito com a class A da linha 16 que tem o mesmo nome.
Que técnica que está sendo usada nesta linha. O Eclipse me dá um aviso na linha 24 do exercicio,dizendo assim:
“The Type A is hiding the type Beta.A” .O tipo A está escondendo o tipo Beta.A
O que quer dizer isto ?

5 Respostas

D

Eu vou tentar explicar me corrijam se etiver errado por favor.

B: está certa porque o metódo definiu uma classe interna que sobreescreve o da interface e
instancia o objeto desta classe e chama o metodo fubar com esta referência, no fubar a jvm ver que se trata
está sobreescrito e chama a versão definida na classe interna criada no metódo.E imprime 2.

E: a está certa porque vc está eliminado a classe interna de Beta e metodo testFoo chama metódo fubar com base
na classe interna que definiu nele mesmo.

F:Sevc eliminar a classe interna que vs definiu no metódo testFoo o parâmetro usado para chamar o metódo fubar será a classe interna de Beta que sobreescreve que retorna 1.

Mais uma vez me corrijam se estiver errado.

antonioedirane

Daniel.F:
Eu vou tentar explicar me corrijam se etiver errado por favor.

A: está certa porque o metódo definiu uma classe interna que sobreescreve o da interface e
instancia o objeto desta classe e chama o metodo fubar com esta referência, no fubar a jvm ver que se trata
está sobreescrito e chama a versão definida na classe interna criada no metódo.

E: a está certa porque vc está eliminado a classe interna de Beta e metodo testFoo chama metódo fubar com base
na classe interna que definiu nele mesmo.

F:Sevc eliminar a classe interna que vs definiu no metódo testFoo o parâmetro usado para chamar o metódo fubar será a classe interna de Beta que sobreescreve que retorna 1.

Mais uma vez me corrijam se estiver errado.


Mas no exercicio, fala que a resposta A está errada. E você falou que esta certa.
Tem erro nesta pergunta ?
Obrigado pela atenção.

D

Desculpa é a B que está o codigo imprimi 2.Deu pra entender??

antonioedirane

Acho que sim.
Então neste exercicio temos o seguinte.

  1. Class A(linha 16) é uma classe interna de Beta
  2. Class A(linha 24) é uma outra classe interna local de método

É isso ?

D

É isto mesmo.

Criado 25 de março de 2009
Ultima resposta 25 de mar. de 2009
Respostas 5
Participantes 2