Ciao a tutti, sono nuovo, mi chiamo Diego, piacere "conoscervi" :-).
Volevo proporre un piccolo problema, di quelle domande un pò sciocche.
Spero di non essere andato troppo veloce, ma non mi sembra di aver visto nulla a riguardo.
Allora, in Java sono andato sparato facendo un pò di tutto, anche progettini di medio/bassa complessità.
A un certo punto sono tornato indietro perchè volevo approfondire la questione e iniziano a venire i dubbi anche più semplici.
Mi stavo rivedendo e tastando i package, le clausole public, private, protected, e default e mi sono accorto che (lasciando perdere public e private):

- Se due classi appartengono allo stesso package, anche se non c'è una relazione di ereditarietà tra di esse, la visibilità di package fa si che la classe che usa può comunque chiamare i metodi protected della classe che contiene il metodo o il campo desiderato.
(in sostanza utilizzare default e utilizzare la clausola protected non cambia nulla)

- Se due classi appartengono a diversi package, ma hanno una relazione di ereditarietà, ho visto che la sottoclasse non può comunque chiamare campi o metodi protected della superclasse, ma questa, per far si che le vengano letti i metodi o i campi dalle sue sottoclassi di altri package, questi devono essere comunque resi public.

A questo punto, la clausola protected è superflua o mi potete spiegare un caso dove devo per forza utilizzare questa clausola?