| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/09/2006 09:41:40
|
rodrigo_lm
JavaChild
![[Avatar]](/images/avatar/f56de5ef149cf0aedcc8f4797031e229.png)
Membro desde: 24/07/2006 14:21:52
Mensagens: 107
Localização: São Paulo
Offline
|
Estava fazendo o simulado do Wihizlabs e achei a seguinte questão:
O resultado deste codigo é: 5
A minha duvida é: Porque a Linha 1 chama o metodo da linha 3 ao inves do metodo da linha 2, sendo que c1 tem referencia para o metodo contido na classe SubCovariantTest.
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/09/2006 09:58:41
|
seduardo
Thread.start()
Membro desde: 10/02/2003 18:33:21
Mensagens: 30
Localização: São Paulo/SP
Offline
|
Pois tem um erro no código, na linha 2 você colocou :
ao invés de :
a assinatura esta diferente, portanto não tem sobre-escrita do método. Tente esta mudança e verá que terá como resposta 6.
|
Sérgio |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/09/2006 10:02:27
|
seduardo
Thread.start()
Membro desde: 10/02/2003 18:33:21
Mensagens: 30
Localização: São Paulo/SP
Offline
|
Desculpe-me, mandei a segunda linha errada, tem que ser :
se colocar
continua recebendo 5 como resposta.
|
Sérgio |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/09/2006 10:20:57
|
rodrigo_lm
JavaChild
![[Avatar]](/images/avatar/f56de5ef149cf0aedcc8f4797031e229.png)
Membro desde: 24/07/2006 14:21:52
Mensagens: 107
Localização: São Paulo
Offline
|
Acho que estou fazendo confusão mas,
e
Existe sobrescrita de metodo, porque B extende A, logo B é uma covariante de A, então não altera a assinatura do metodo.
O que eu quero saber é porque a JVM chama o metodo da linha 3 sendo que c1 tem referencia para a classe SubCovariantTest, então deveria chamar o metodo na linah 2.
Nossa, acho que estou bobeando em algum ponto, essa esta dificil de entender..
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/09/2006 10:28:51
|
seduardo
Thread.start()
Membro desde: 10/02/2003 18:33:21
Mensagens: 30
Localização: São Paulo/SP
Offline
|
Na verdade não chama o método da linha 3 não, é um problema de interpretação do encapsulamento. Se vc pegar e exibir qual objeto foi instanciado :
Em ambas assinaturas, vc vai notar que ele está iniciando certo o objeto a partir de B. Porém vc está acessando um atributo, e neste caso ele utiliza o nome da classe para fazer a decisão e não a tabela virtual de sobre-escrita.
Tente o seguinte código:
e ao invés de chamar chame vai notar que tudo roda como seria esperado.
|
Sérgio |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/09/2006 10:38:34
|
rodrigo_lm
JavaChild
![[Avatar]](/images/avatar/f56de5ef149cf0aedcc8f4797031e229.png)
Membro desde: 24/07/2006 14:21:52
Mensagens: 107
Localização: São Paulo
Offline
|
seduardo, muito obrigado,
Agora consegui entender...
|
|
|
 |
|
|