Dreke90 di Dreke90
Genius 6795 punti

Il modificatore public

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.

Registrati via email