Erro questão TestKiller?

5 respostas
Nykolas_Lima
Question 193
Given classes defined in two different files:
1. package packageA;
2. public class Message {
3. String getText() { return ?text?; }
4. }
and:
1. package packageB;
2. public class XMLMessage extends packageA.Message {
3. String getText() { return ?<msg>text</msg>?; }
4. public static void main(String[] args) {
5. System.out.println(new XMLMessage().getText());
6. }
7. }
What is the result of executing XMLMessage.main?
A. text
B. <msg>text</msg>
C. An exception is thrown at runtime.
D. Compilation fails because of an error in line 2 of XMLMessage.
E. Compilation fails because of an error in line 3 of XMLMessage.

Answer: E

Para mim a resposta seria B.

Tudo bem eu sei que o método tem acesso friendly e por isso ele é restrito apenas ao pacote e nao pode ser utilizado nem mesmo pela herança.

A classe XMLMessage estende a classe Message, o método por sua vez NÃO é herdado por causa do modificador friendly.

A classe XMLMessage simplemente escreve um método com o mesmo nome do método da classe Message, esse método NÃO é uma sobrescrição válida mas ele NÃO gera um erro de compilação, ele simplesmente não sobrescreve o método de Message, é um outro método totalmente independente.

Isso que eu acabei de escrever está certo ou errado?

5 Respostas

thiago.correa

Velho o teu método tem o acesso default e você está tentando acessá-lo de outro pacote!

bsl.lacerda

Ué…

String getText() { return ?<msg>text</msg>?;

não é um novo método da classe XMLMessage?

Outra, eu não poderia acessar o método getText pelo fato de o mesmo não ser stático.

Concordam?

bsl.lacerda

Implementei as classes aqui e sim, eu posso acessar o método getText() da classe XMLText mesmo não sendo estático, mas não dá erro de compilação não.
É executado o método getText da classe XMLText normalmente.

Nykolas_Lima

Não ele nao está tentando acessa-lo, ele esta tentando escrever outro método com o mesmo nome.

É a mesmo coisa se eu tivesse um método private na classe pai e a filha escrevesse um método com o mesmo nome desse método privado.

Isso compilaria, afinal o método não foi herdado. Voce simplesmente está criando outro método com o mesmo nome, totalmente independente da herança.

Continuo achando que a resposta dessa pergunta está errada

gustavobs

cara fica tranquilo, é B mesmo. Eu tb achei este erro.

Criado 13 de março de 2009
Ultima resposta 14 de mar. de 2009
Respostas 5
Participantes 4