Em Java, existem quatro modificadores de acesso disponíveis para métodos:
public
- qualquer classe pode usar esse método.
protected
- classes no mesmo pacote e subclasses em qualquer pacote podem usar esse método.
private
- somente essa classe pode usar esse método.
no modifier
("pacote privado") - somente classes no mesmo pacote podem usar esse método.
O que acontece com frequência é que eu quero ter métodos úteis em uma superclasse, que todas as subclasses possam usar. Mas não faria sentido para outras classes acessar esse método e, em certo sentido, quebraria o encapsulamento.
Portanto, tenho que declarar esses métodos úteis na superclasse public
ou protected
, que os expõe a todas as outras classes, pelo menos no pacote. Mesmo que sejam apenas para serem usadas pelas subclasses.
Existe uma razão pela qual não há um subclasses-only
modificador de acesso em Java? Parece muito estranho para mim. Estou esquecendo de algo?
Além disso, um subclasses-only
modificador de acesso também seria útil para quando você deseja expor variáveis apenas para subclasses. O que para mim acontece muito.