Storia della questione:
Il controllo del livello di accesso ai dati e ai metodi in Java è stato introdotto per garantire l'incapsulamento e proteggere la struttura interna delle classi. Questa è una parte importante della OOP, che consente di nascondere l'implementazione e prevenire modifiche non autorizzate allo stato degli oggetti.
Problema:
I diversi modificatori di accesso — public, protected, (package-private), private — limitano in modo diverso la visibilità dei membri della classe, il che spesso non è ovvio. Un livello scelto in modo errato può portare a bug, a un'espansione indesiderata dei diritti e a una violazione dell'incapsulamento.
Soluzione:
Usare il modificatore di accesso minimo necessario per ogni campo o metodo. Java supporta:
Esempio di codice:
public class Dog { private String name; // visibile solo all'interno di Dog String breed; // package-private protected int age; // visibile nel pacchetto e nei discendenti public void bark() { // accessibile da qualsiasi codice System.out.println("Woof!"); } }
Caratteristiche principali:
Un classe interna (inner) può accedere a tutti i campi private della classe esterna?
Sì, alla classe interna sono completamente accessibili tutti i campi e i metodi esterni, anche quelli privati. E viceversa, l'esterno può accedere ai membri privati della classe interna, se ha la sua istanza.
Un membro protected della classe può essere accessibile al di fuori del pacchetto senza ereditarietà?
No. Al di fuori del pacchetto protected è comodo solo per gli eredi. Così, tramite un oggetto della classe in un altro pacchetto — non è possibile.
Cosa succede se la classe non è dichiarata public, ma viene importata da un altro pacchetto?
Una classe con livello package-private non può essere importata e utilizzata esplicitamente al di fuori del proprio pacchetto. Un tentativo di accedervi dal codice di un altro pacchetto genererà un errore di compilazione.
Caso negativo
Tutti i campi della classe per DTO sono contrassegnati come public per semplificare l'accesso
Pro:
Contro:
Caso positivo
Si usano campi private e metodi pubblici di accesso
Pro:
Contro: