L'accesso predefinito è altrimenti noto come livello di pacchetto privato o protetto ... a tua scelta, non veramente ha un termine, ma è utile pensarlo in questo modo.
Se si scava all'interno del sorgente per java.lang
lo si vedrà spesso - consentendo ad altre classi all'interno di java lang di accedere ad alcuni interni di questa classe senza esporre quegli interni a tutto il mondo.
Basta dare un'occhiata, un esempio di questo è sizeTable
in java.lang.Integer
( grepcode ) che consente di inserire un singolo punto in cui sono archiviate queste informazioni. Poiché questo è associato a stringSize
(appena al di sotto di esso) che è probabilmente utilizzato in java.lang.String
, significa che non è necessario averne due copie o esporle. Altri metodi nell'area mostrano anche più di questa relazione Integer / String.
Pensando ancora a questo, hai Integer.toString(int i)
e String.valueOf(int i)
- entrambi fanno cose molto simili. Anche se è discutibile se vuoi avere la capacità di fare la stessa cosa in due classi ... se lo fai, vuoi solo avere il codice in un posto - il che ti rimanda ad avere un incapsulamento a livello di pacchetto.
Mettere le cose all'interno dello stesso pacchetto dovrebbe essere una parte importante dell'incapsulamento. Le classi all'interno di un pacchetto dovrebbero funzionare a stretto contatto l'una con l'altra. Significa che queste classi dovrebbero essere in grado di guardare le rispettive parti interne e lavorare con loro. Evita di avere java.lang.FunkyStringConstatns
seduto là fuori per tutto il mondo a vedere ... e una volta che il mondo lo vede come qualcosa di pubblico, significa che non si può andare a cambiarlo.
Questo ha meno significato quando si lavora all'intero progetto dall'inizio alla fine e non ci sono API pubbliche. È più un 'sì, è lì' allora. Ma se lavori su API pubbliche, vorrete che le volte sia possibile condividere i dati senza condividerli con il mondo.