| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/02/2009 19:38:24
|
taaqui
JavaEvangelist
![[Avatar]](/images/avatar/13b96a16c5db9bc9de8f05b6f74a5d96.jpg)
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/02/2009 19:56:52
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/02/2009 20:09:49
|
André Fonseca
JWizard
![[Avatar]](/images/avatar/286b0b3ea509af1aeff6bb47299d96d7.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/02/2009 20:19:04
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/02/2009 20:35:18
|
André Fonseca
JWizard
![[Avatar]](/images/avatar/286b0b3ea509af1aeff6bb47299d96d7.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/02/2009 20:37:21
|
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.
|
|
|
|
 |
|
|