In Java, ci sono quattro modificatori di accesso disponibili per i metodi:
public - qualsiasi classe può utilizzare questo metodo.
protected - le classi nello stesso pacchetto e le sottoclassi in qualsiasi pacchetto possono utilizzare questo metodo.
private - solo questa classe può utilizzare questo metodo.
no modifier ("pacchetto privato") - solo le classi nello stesso pacchetto possono utilizzare questo metodo.
Quello che succede spesso è che voglio avere metodi utili in una superclasse, che tutte le sottoclassi possono usare. Ma non avrebbe senso che altre classi accedessero a questo metodo e, in un certo senso, rompesse l'incapsulamento.
Quindi devo dichiarare questi metodi utili nella superclasse public o protected , che li espone a tutte le altre classi almeno nel pacchetto. Anche se sono pensati solo per essere usati dalle sottoclassi.
C'è una ragione per cui non esiste un modificatore di accesso subclasses-only in Java? Mi sembra molto strano. Mi manca qualcosa?
Inoltre, un modificatore di accesso subclasses-only sarebbe utile anche quando vuoi esporre le variabili solo a sottoclassi. Che a me succede molto.