Acessibilidade overriden method

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 :slight_smile:



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

>

>