Java segue i suoi principi di progettazione su se stesso. Cosa succede quando provi a ridurre/restringere l'ambito del metodo pubblico in una sottoclasse? si ottiene un errore. Java modificatori portata livelli seguono: private < (default) < protetto < pubblico
Tutte le classi nel pacchetto si suppone di essere amichevole perché lavorano insieme. Per rendere un membro disponibile nel pacchetto è definito nell'ambito di default.
Una sottoclasse può risiedere al di fuori del pacchetto, seguendo ancora una volta i livelli di ambito: private < (default) < protetto < pubblico - Non possiamo restringere il campo di applicazione. Protetto è un ambito più ampio rispetto a quello predefinito, quindi Java non contraddice le proprie linee guida. Pertanto, un membro protetto sarà disponibile nell'ambito di default. Inoltre: pacchetto classe < <.
Si prega di non limitare i modificatori solo alla visibilità, ma anche l'ereditarietà, la struttura sono in funzione contemporaneamente e li aggiungono anche all'immagine. Se questo era vero: privato < protetto < (predefinito) < pubblico. quindi tutte le sottoclassi dovrebbero risiedere nello stesso pacchetto, quindi perché è necessario ereditare è possibile accedere a tutto come l'ambito predefinito è lì applicabile a livello di pacchetto. L'ambito predefinito avrebbe perso il suo valore e quindi l'ereditarietà.
+1 Francamente voglio sapere anche il perché. Mi ha sempre colpito come una delle decisioni progettuali più stupide in Java. – cletus
@cletus: Più ci penso e più arrivo alla conclusione che "pacchetto privato" era un'idea non ben pensata. Per "pacchetto privato" per il lavoro effettivo e offrire qualsiasi tipo di protezione reale, i pacchetti dovrebbero essere compilati all'interno di una singola unità di compilazione. E uno non dovrebbe essere in grado di migliorarli in seguito. – Martin