Covariant - Duvida  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
rodrigo_lm
JavaChild
[Avatar]

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.
[MSN]
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
[Email]
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
[Email]
rodrigo_lm
JavaChild
[Avatar]

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..
[MSN]
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
[Email]
rodrigo_lm
JavaChild
[Avatar]

Membro desde: 24/07/2006 14:21:52
Mensagens: 107
Localização: São Paulo
Offline

seduardo, muito obrigado,

Agora consegui entender...
[MSN]
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team