Panoramica dei livelli di accesso
Fa parte della sezione Programmazione orientata agli oggetti del percorso Java di Coddy. Lezione 10 di 87.
I modificatori di accesso controllano da dove è possibile accedere ai campi e ai metodi. Java ha quattro livelli di controllo dell'accesso.
| Modificatore | Stessa classe | Stesso pacchetto | Sottoclasse | Ovunque |
|---|---|---|---|---|
private | Sì | No | No | No |
| predefinito (nessuna parola chiave) | Sì | Sì | No | No |
protected | Sì | Sì | Sì | No |
public | Sì | Sì | Sì | Sì |
public class BankAccount {
private double balance; // Solo questa classe
String accountType; // Predefinito: solo nello stesso package
protected String owner; // Stesso package + sottoclassi
public String bankName; // Accessibile ovunque
}private è il più restrittivo: usalo per i dati interni a cui non si dovrebbe mai accedere direttamente. public è il più aperto: usalo per i metodi che altre classi devono poter chiamare.
Quando non specifichi alcun modificatore, Java utilizza l’accesso default (detto anche package-private). Questo consente l’accesso solo all’interno dello stesso package.
class Helper { // Classe con accesso predefinito
void assist() { } // Metodo con accesso predefinito
}Scegli il livello di accesso più restrittivo che consenta comunque al tuo codice di funzionare. Questo protegge i tuoi dati e rende il tuo codice più facile da mantenere.
Sfida
FacileCreiamo un sistema di record Student che mostra come i modificatori di accesso controllano la visibilità tra file diversi.
Creerai due file per organizzare il codice:
Student.java: definisci una classe Student con campi che usano diversi livelli di accesso:- campo
private:studentId(String) - accessibile solo all'interno della classe Student - campo predefinito (senza modificatore):
grade(int) - accessibile all'interno dello stesso package - campo
protected:name(String) - accessibile nello stesso package e nelle sottoclassi - campo
public:school(String) - accessibile ovunque
publicchiamatogetInfo()che restituisce una stringa nel formato:"[studentId] name - Grade grade at school"- campo
Main.java: crea un oggetto Student e mostra quali campi possono essere accessibili direttamente dall'esterno della classe. Stampa direttamente il camposchool, quindi stampa il risultato digetInfo()per mostrare tutte le informazioni dello studente.
Riceverai quattro input: studentId, name, grade e school (in quest'ordine).
L'output deve essere composto da due righe: il nome della scuola a cui si accede direttamente, seguito dalle informazioni complete dello studente restituite dal metodo getInfo().
Provalo tu
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Leggi i dati di input
String studentId = scanner.nextLine();
String name = scanner.nextLine();
int grade = Integer.parseInt(scanner.nextLine());
String school = scanner.nextLine();
// TODO: Crea un oggetto Student con i valori di input
// TODO: Stampa direttamente il campo school (accessibile perché è public)
// TODO: Stampa il risultato di getInfo() per mostrare tutte le informazioni dello studente
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione a oggetti
File esterniIntroduzione alla programmazione a oggettiClassi e oggettiLa parola chiave thisMetodiCampi (attributi)Metodo costruttoreSovraccarico dei costruttoriRipasso - Calcolatrice semplice4Ereditarietà
Ereditarietà di base (extends)La parola chiave superSovrascrittura dei metodi (@Override)Concatenamento dei costruttoriLa classe ObjectEreditarietà singola e multilivelloPerché non esiste l'ereditarietà multipla delle classiRiepilogo: gerarchia dei dipendenti7Metodi speciali e classe Object
Metodo toString()equals() e hashCode()Metodo clone()compareTo() e ComparableInterfaccia ComparatorRiepilogo - Ordinamento personalizzato2Modificatori di accesso e incapsulamento
Panoramica dei livelli di accessoMetodi getter e setterNascondimento delle informazioniLa parola chiave finalRiepilogo - Gestore di conti bancari5Polimorfismo
Nozioni di base sull'overloading dei metodiOverride dei metodi (a runtime)Upcasting e downcastingL'operatore instanceofClassi e metodi astrattiRiepilogo - Calcolatore di forme8Concetti avanzati di OOP
Composizione vs ereditarietàAggregazione vs composizioneClassi interne, annidate e anonimeEnum e metodi degli EnumRecord (Java 16+)Classi sealed (Java 17+)11Modelli di progettazione Parte 1
Introduzione ai modelli di progettazionePattern SingletonPattern FactoryPattern BuilderPattern ObserverPattern Strategy3Proprietà di classe e membri statici
Variabili di istanza e staticheMetodi staticiBlocchi staticiCostanti (static final)Riepilogo - Contatore e utility6Interfacce e classi astratte
Introduzione alle interfacceImplementazione delle interfacceImplementazione di più interfacceMetodi default e static nelle interfacceClassi astratte e interfacce a confrontoInterfacce funzionaliRiepilogo: sistema di pagamento9Tipi generici
Introduzione ai tipi genericiClassi genericheMetodi genericiParametri di tipo con limitiCaratteri jolly (?, extends, super)Riepilogo - Contenitore generico12Modelli di progettazione – Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositePattern IteratorEsercitati da solo: Compilatore Java online