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 publicou 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-onlymodificador de acesso em Java? Parece muito estranho para mim. Estou esquecendo de algo?
Além disso, um subclasses-onlymodificador de acesso também seria útil para quando você deseja expor variáveis apenas para subclasses. O que para mim acontece muito.