Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Modificatore Private | Classi Avanzate
Java Avanzato

bookModificatore 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 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

Main.java

copy
123456789101112131415
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 si tenta di inizializzare direttamente il campo, si ottiene 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 costruttore. Tuttavia, in questo modo, possiamo solo inizializzare i campi degli oggetti ma non accedere a tali campi. Vediamo un esempio:

Main.java

Main.java

copy
123456789101112131415161718
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 ancora accedere a questo campo e stamparlo utilizzando System.out.println(). Per ovviare a questo, possiamo sovrascrivere il metodo toString() in modo che, quando chiamiamo System.out.println(bob);, vengano visualizzate le informazioni sui suoi campi. Vediamo un esempio:

Main.java

Main.java

copy
1234567891011121314151617181920212223
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 è stata implementata la logica per mostrare il valore di name.

Sorge spontanea una domanda: perché è necessario questo modificatore di accesso se occorre scrivere così tanto codice aggiuntivo?

Talvolta, in classi diverse, sono presenti variabili con lo stesso nome e, in questi casi, è necessario nascondere le variabili di tali classi affinché le altre classi non possano accedere a campi non necessari. Questo migliora notevolmente la praticità nella scrittura del codice, poiché consente di comprendere chiaramente a quale classe appartiene ciascun campo.

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 5. Capitolo 3

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Suggested prompts:

Can you explain more about the different access modifiers in Java?

Why is it important to hide fields and methods from other classes?

Can you show an example of using getters and setters to access private fields?

bookModificatore Private

Scorri per mostrare il menu

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 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

Main.java

copy
123456789101112131415
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 si tenta di inizializzare direttamente il campo, si ottiene 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 costruttore. Tuttavia, in questo modo, possiamo solo inizializzare i campi degli oggetti ma non accedere a tali campi. Vediamo un esempio:

Main.java

Main.java

copy
123456789101112131415161718
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 ancora accedere a questo campo e stamparlo utilizzando System.out.println(). Per ovviare a questo, possiamo sovrascrivere il metodo toString() in modo che, quando chiamiamo System.out.println(bob);, vengano visualizzate le informazioni sui suoi campi. Vediamo un esempio:

Main.java

Main.java

copy
1234567891011121314151617181920212223
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 è stata implementata la logica per mostrare il valore di name.

Sorge spontanea una domanda: perché è necessario questo modificatore di accesso se occorre scrivere così tanto codice aggiuntivo?

Talvolta, in classi diverse, sono presenti variabili con lo stesso nome e, in questi casi, è necessario nascondere le variabili di tali classi affinché le altre classi non possano accedere a campi non necessari. Questo migliora notevolmente la praticità nella scrittura del codice, poiché consente di comprendere chiaramente a quale classe appartiene ciascun campo.

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 5. Capitolo 3
some-alt