Dúvida básica

Quando um método com qualquer modificador é herdado de uma superclasse (exceto private), eu posso sobrescrever esse método com o modificador que desejar ?

e outra, existe método abstract em uma classe que não seja abstract ??

:?:

1 - A regra para Overriding é que você não pode definir um modificador de acesso mais restrito do que o da super classe. Exemplo se na classe está definido como protected, você pode utilizar public. Se ele estiver definido com default (sem modificador), você pode utilizar protected e publiic.

2 - Pela regra se existir um método abstract na classe, essa deverá ser abstract também.

Abraço,

isso equivale para métodos e variáveis?

Exato, no caso dos modificadores, sim!

[quote=“elvishr”]Quando um método com qualquer modificador é herdado de uma superclasse (exceto private), eu posso sobrescrever esse método com o modificador que desejar ?

e outra, existe método abstract em uma classe que não seja abstract ??

:?:[/quote]

Todo método em Java é, por default, virtual (virtual é diferente de abstrato). Assim, qualquer método pode ser sobreescrito, exceto se tal método for declarado como final.

qualquer método não, métodos private e static não podem ser sobrescritos.(JLS 8.4.3 e 8.4.3.6)

Um método private não pode ser sobrescrito não é?
É como sobrescrito, mas na verdade ele nem sabe que existe o método na superclasse e se tiver a mesma assinatura é sim coincidência, e não que foi herdado e sobrescrito.

me corrijam se estiver errado.

Agora, porque um método static não pode ser sobrescrito???

[quote=“elvishr”]Um método private não pode ser sobrescrito não é?
É como sobrescrito, mas na verdade ele nem sabe que existe o método na superclasse e se tiver a mesma assinatura é sim coincidência, e não que foi herdado e sobrescrito.

me corrijam se estiver errado.

Agora, porque um método static não pode ser sobrescrito???[/quote]

é isso mesmo!

O termo para isso é hiding e não overriding.
Quanto ao métodos estáticos, overriding é um termo relacionado à herança e os métodos estáticos pertencem à classe e não a nenhuma instância da classe.

qualquer método não, métodos private e static não podem ser sobrescritos.(JLS 8.4.3 e 8.4.3.6)[/quote]

hmmm… Ops… esqueci dos métodos static. Mas não faz sentido falar em sobreescrita de método private, uma vez que eles “não existem” para as sub-classes :wink: .