Sobre a linguagem Java, marque V para as afirmativas verdadeiras e F para as falsas. ( ) A classe String é um exemplo de uma classe final. ( ) Uma declaração do método final nunca pode mudar; assim, todas as subclasses utilizam a mesma implementação do método. ( ) Um método final em uma superclasse pode ser sobrescrito como uma subclasse, garantindo que a implementação do método final será utilizada por todas as subclasses diretas e indiretas na hierarquia. ( ) Uma classe final pode ser estendida para criar uma subclasse, e todos os métodos em uma classe final são, implicitamente, final. ( ) Métodos que são declarados private são implicitamente final, porque não é possível sobrescrevê-los como uma subclasse. A sequência está correta em
- A)F, V, F, V, F.
Errada, porque a sequência traz a terceira e a quarta assertivas trocadas em relação ao que Java realmente permite.
- B)V, F, V, F, V.
Errada, porque a segunda e a quarta assertivas não estão de acordo com as regras de final em Java.
- C)F, F, V, V, F.
Errada, porque a primeira e a segunda assertivas não são falsas e a terceira não é verdadeira.
- D)V, V, F, F, V.
Certa, porque String é final, método final não pode ser sobrescrito, classe final não pode ser estendida e métodos private não são sobrescritos.
Gabarito: D
Em Java, a palavra-chave final aparece muito para limitar alterações: em classe, impede herança; em método, impede sobrescrita; em variável, impede reatribuição. A classe String é um exemplo clássico de classe final, justamente porque não pode ser estendida. Isso ajuda a garantir segurança e imutabilidade em vários pontos da linguagem. Também é importante separar método final de método private. Um método final não pode ser sobrescrito por subclasses, então a implementação dele continua a mesma na hierarquia. Já um método private nem sequer é herdado de forma acessível pela subclasse, então também não pode ser sobrescrito. Na prática, a banca gosta de misturar essas ideias para ver se voce confunde herança com visibilidade. A prova acerta o gabarito D porque a primeira afirmação é verdadeira: String é final. A segunda também é verdadeira: método final não pode mudar por sobrescrita, então a mesma implementação vale para as subclasses. A terceira é falsa porque justamente o método final não pode ser sobrescrito por subclasse. A quarta é falsa porque classe final não pode ser estendida, embora seus métodos sejam considerados, em regra, não sobrescrevíveis por herança. A quinta é verdadeira no sentido cobrado em prova: métodos private não podem ser sobrescritos, pois não são acessíveis pela subclasse. Resumo de prova: classe final trava herança; método final trava sobrescrita; private também não é sobrescrito porque fica fora do alcance da subclasse.