Contenuti del Corso
Java Avanzato
Java Avanzato
Modificatore Private
Come nascondere campi e metodi da un'altra classe?
I modificatori di accesso vengono utilizzati per controllare la visibilità e l'accessibilità di variabili e metodi in Java. Consentono di definire l'ambito e di limitare l'accesso a determinati membri di una classe.
Abbiamo già discusso dei modificatori di accesso nella sezione precedente. Ora, esaminiamo più da vicino il modificatore di accesso più comunemente utilizzato: private
.
Come già sapete, con il modificatore di accesso private
, è possibile accedere a un campo/metodo solo dalla classe in cui si trova. Vediamo un esempio di utilizzo del modificatore private
:
Ad esempio, se non si desidera che una variabile in una classe sia visibile o accessibile da un'altra classe, è possibile utilizzare il modificatore di accesso private
:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person(); bob.name = "Bob"; System.out.println(bob.name); } } class Person { private String name; private int age; private String gender; }
Abbiamo dichiarato i campi della classe Person
come private
. Quando proviamo a inizializzare direttamente il campo, otteniamo un errore che indica che il campo name
ha un modificatore di accesso private
e non è accessibile per la chiamata o la modifica nel metodo main.
Come inizializzare un campo privato?
Il modo più semplice per aggirare la protezione è utilizzare l'inizializzazione tramite un costruttore. Tuttavia, in questo modo, possiamo solo inizializzare i campi degli oggetti ma non accedere a tali campi. Vediamo un esempio:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob"); System.out.println(bob.name); } } class Person { private String name; private int age; private String gender; public Person(String name) { this.name = name; } }
Siamo riusciti a inizializzare il campo name
tramite il costruttore, ma non possiamo comunque accedere a questo campo e stamparlo usando System.out.println()
. Per aggirare questo limite, possiamo sovrascrivere il metodo toString()
in modo che, quando chiamiamo System.out.println(bob);
, vengano mostrate le informazioni sui suoi campi.
Vediamo un esempio:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob"); System.out.println(bob); } } class Person { private String name; private int age; private String gender; public Person(String name) { this.name = name; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + '}'; } }
Siamo finalmente riusciti a visualizzare il valore del campo name
dell'oggetto bob
. Questo risultato è stato ottenuto utilizzando il metodo sovrascritto toString()
dove abbiamo implementato la logica per mostrare il name
.
Sorge quindi la domanda: perché abbiamo bisogno di questo modificatore di accesso se dobbiamo scrivere così tanto codice aggiuntivo?
A volte, in classi diverse, esistono variabili con lo stesso nome e, in questi casi, è necessario nascondere le variabili di queste classi affinché le altre classi non abbiano accesso a campi non necessari. Questo migliora notevolmente la praticità nella scrittura del codice in generale, poiché si comprende a quale classe appartiene ciascun campo.
Grazie per i tuoi commenti!