Concetti Chiave
- Le classi Java di default sono accessibili solo all'interno del loro package di appartenenza.
- Il modificatore "public" è utilizzato per rendere una classe o un membro accessibile dall'esterno del package.
- Una classe pubblica deve essere dichiarata in un file con lo stesso nome della classe seguito da ".java".
- Solo una classe pubblica è permessa per ogni file sorgente, semplificando la gestione di sorgenti e bytecode.
- Le classi non pubbliche in un file servono come dettagli implementativi non accessibili fuori dal package.
Di default, la definizione di una classe Java può essere utilizzata solo dalle classi all’interno del suo stesso package. Per esempio, assumiamo di aver scritto una applicazione in un file Appo.java non appartenente a nessun package e, supponiamo che esista una classe Stack appartenente al package app.stack . Per definizione, Appo.java non potrà accedere alla definizione di classe di Stack.
package app.stack;
class Stack
{
int data[];
int ndata;
void push(int i)
{
……
}
int pop()
{
……..
}
}
Java richiede al programmatore di esplicitare quali classi e quali membri possano essere utilizzati all’esterno del package.
A questo scopo Java riserva il modificatore public da utilizzare prima della dichiarazione della classe o di un membro come mostrato nella nuova versione della classe Stack detta ora classe pubblica.
package app.stack;
public class Stack
{
int data[];
int ndata;
public void push(int i)
{
……
}
public int pop()
{
……..
}
}
Le specifiche del linguaggio richiedono che il codice sorgente di classe pubblica sia memorizzata in un file avente lo stesso nome della classe (incluse maiuscole e minuscole), ma con estensione “.java”. Come conseguenza alla regola, può esistere solo una classe pubblica per ogni file di sorgente. Questa regola è rinforzata dal compilatore che scrive il bytecode di ogni classe in un file avente lo stesso nome della classe (incluse maiuscole e minuscole), ma con estensione “.class”.
Lo scopo di questa regola è quello di semplificare la ricerca di sorgenti e bytecode da parte del programmatore. Per esempio supponiamo di avere tre classi A, B e C in un file unico. Se A fosse la classe pubblica (solo una lo può essere), il codice sorgente di tutte e tre le classi dovrebbe trovarsi all’interno di un file A.java . Quando A.java verrà compilato, il compilatore creerà una classe per ogni classe nel file: A.class, B.class e C.class .
Questa organizzazione per quanto contorta, ha un senso logico. Se come detto la classe pubblica è l’unica a poter essere eseguita da altre classi all’esterno del package, le altre classi rappresentano solo l’implementazione di dettagli non necessarie al di fuori del package.
Domande da interrogazione
- Qual è la funzione del modificatore public in Java?
- Quali sono le regole per il nome del file sorgente di una classe pubblica in Java?
- Perché è importante la regola che limita a una sola classe pubblica per file di sorgente?
Il modificatore public in Java permette di specificare quali classi e membri possono essere utilizzati al di fuori del package, rendendo la classe o i membri accessibili da altre classi esterne.
Il codice sorgente di una classe pubblica deve essere memorizzato in un file con lo stesso nome della classe (rispettando maiuscole e minuscole) e con estensione ".java". Solo una classe pubblica può esistere per ogni file di sorgente.
Questa regola semplifica la ricerca di sorgenti e bytecode, poiché il compilatore crea un file .class per ogni classe nel file sorgente, facilitando l'organizzazione e l'accesso ai dettagli di implementazione necessari solo all'interno del package.