Duvida Questão de prova  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
taaqui
JavaEvangelist
[Avatar]

Membro desde: 05/02/2008 12:25:07
Mensagens: 300
Localização: Rio de Janeiro
Offline


What is the result?
A. Value: 3
B. Value: 8
C. Value: 13
D. Compilation fails.
E. The code runs with no output.
F. An exception is thrown at runtime.
Answer: A

Não entendi porque o foo.a esta retornando a variável inteira da superclasse.

SCJP-SCWCD-SCBCD
[Email]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Acho que é mais fácil explicar completando seu exemplo.



A idéia é que só os métodos são sobreescritos, mas não as variáveis, que no máximo podem ser escondidas.
As variáveis de instância se comportam como se fossem métodos estáticos.
Se você entender como é que funcionam os métodos estáticos, vai também entender como funcionam as variáveis de instância.
Quando você criou uma classe Foo, definiu uma variável de instância com o nome "a".
Quando você criou uma classe Bar, definiu mais uma variável de instância, dessa vez com o nome "a", que escondeu a outra.
Para acessar a variável de instância "a" da superclasse (Foo), você tem de usar uma referência com o tipo da superclasse.
Para acessar a variável de instância "a" da subclasse (Bar), você tem de usar uma referência com o tipo da subclasse.
[WWW]
André Fonseca
JWizard
[Avatar]

Membro desde: 23/02/2007 15:52:55
Mensagens: 2034
Offline

oi

o valor é 3, coloque uns System.out.println nos métodos e construtores que você vai entender o que está acontecendo.

quando você faz

Foo foo = new Bar();


significa que você está instanciando um objeto do tipo Foo que se comporta como se fosse um Bar - polimorfismo

a sequencia do que acontece no compilador é:

- chama o construtor vazio de Foo que inicializa a variavel a com 3
- chama o construtor vazio de Bar que inicializa a variavel a com 8
- chama o método addFive da classe Bar que atribui para a variavel instancia do objeto do tipo Bar +=5


Como o objeto foo é do tipo Foo e não Bar a variável a (variável de instância do objeto Foo) não é incrementada, experimente colocar no método addFive da classe bar assim

super.a +=5;


a chamada do método estará incrementando a variavel de instancia do pai

posso ter errado em alguns conceitos ou na hora de explicar, por favor me corrigam se estiver errado..



Editado: o construtor de Bar inicializa a variavel de instancia a com valor 8

This message was edited 1 time. Last update was at 25/02/2009 20:39:36


Você é novo no GUJ?


Como fazer perguntas?



www.twitter.com/_afonseca
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Completei o exemplo com setters e getters.
Como os getters e setters não são escondidos, mas sobreescritos, então o resultado de getA() depende só do tipo da variável.
Então você vai ver que tanto usando "foo.getA()" quanto "bar.getA()" o resultado impresso é sempre 13, já que estamos usando sempre o método "getA" da classe Bar, já que o objeto é da classe Bar.

[WWW]
André Fonseca
JWizard
[Avatar]

Membro desde: 23/02/2007 15:52:55
Mensagens: 2034
Offline

thingol,

então quer dizer que eu "viajei" nessa explicação acima ??

abs

Você é novo no GUJ?


Como fazer perguntas?



www.twitter.com/_afonseca
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

André Fonseca wrote:thingol,

então quer dizer que eu "viajei" nessa explicação acima ??

abs


Não sei - não li a sua explicação completa.


[WWW]
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team