A afirmação abaixo é verdadeira ou falsa?
an overriding method cannot have more access (be more public) than the method being overriden
não seria o contrário?
É, seria o contrário mesmo.
Um método de uma classe filha não pode ser mais privado do que de uma classe pai.
Veja o erro ao compilar:
C:>javac Teste.java
Teste.java:17: teste(java.lang.String) in TesteFilho cannot override teste(java.lang.String) in TestePai; attempting to assign weaker access privileges; was public
private void teste(String teste) {
^
1 error
o site www.examulator.com que mostra uma questão sobre o exame por dia está considerando esta opção como correta!!!
A pergunta é:
Which of the following statements are true?
e as opções são:
1 To be overridden a method must have the same name, parameter types and return type
2 It is possible to override methods in a superclass or the same class
3 classes that are marked as final may not be overriden
4 an overriding method cannot have more access (be more public) than the method being overriden
As opções corretas segundo o site são 1, 3 e 4.
A alternativa 1 é correta, mas a 3 e a 4??? A 4 discutimos acima, e quanto à 3, o termo "overriding" refere-se à metodos e não a classes, uma classe final não pode ser extendida, não é isso?
:-[
Eu não sei se a palavra override aplica-se apenas a métodos… como não é uma "palavra chave", é só uma palavra que as pessoas utilizam pra expressar a idéia, acho que não tem problema falar assim.
E portanto a alternativa 3 está correta (mesmo porque a sentença fala que NÃO são).
Acho que sobrescrever (override) implica repor ou sobrepor totalmente uma funcionalidade, o que não acontece com as classes estendidas, na verdade elas não sobrescrevem a superclasse, mas sim a especializam.
A "Java Language Specification" diz com respeito à "final classes":
8.1.1.2 final Classes
A class can be declared final if its definition is complete and no subclasses are desired or required. A compile-time error occurs if the name of a final class appears in the extends clause (§8.1.3) of another class declaration; this implies that a final class cannot have any subclasses. A compile-time error occurs if a class is declared both final and abstract, because the implementation of such a class could never be completed (§8.1.1.1).
Because a final class never has any subclasses, the methods of a final class are never overridden (§8.4.6.1).
O texto destacado em negrito não é o mesmo que dizer que a classe possa ser "overriden", que diz respeito sempre aos métodos da classe, e não à classe em sí.
Para encerrar a discussão
Marcus Green, mantenedor do site www.jchq.net (conhecido por todos que estudam para a certificação Java Programmer) e do simulado www.examulator.com, respondeu à um e-mail onde eu afirmei que as respostas 3 e 4 são incorretas e ele admitiu e corrigiu o erro, agora apenas a opção 1 é correta como eu "temia". Acho que interpretação de texto também é importante para um bom desempenho no exame.
Your are corret, that question was faulty I have now updated it. Many
thanks for the feedback.
Marcus
examfeedback@jchq.net wrote:
Hi, first of all, congratulations for this excellent tool.
>Regarding this question, I think that options 3 and 4 marked as
correct answers are actually incorrect.
>Option 3 - overriding refers to methods, not classes
>Option 4 - an overriding method CAN be more public than the method
being overriden
>
>thank you
>
>marcio
>
>