|
Le classi in Java possono avere due ruoli:
Nel primo ruolo, una classe descrive le caratteristiche comuni di una collezione di oggetti (si pensi ad esempio alla classe BankAccount). La dichiarazione di classe introduce un nuovo tipo di dato (la classe stessa), i cui elementi saranno i suoi oggetti. Nella classe vengono dichiarati:
Per accedere ad una variabile di istanza di un oggetto, si usa la sintassi <oggetto>.<nomeVariabile>e analogamente per invocare un metodo, si scrive <oggetto>.<nomeMetodo>(<listaParametri>)Ad esempio,
|
|
In una classe possiamo anche dichiarare uno stato
e delle funzionalità che sono associati alla classe stessa,
e non ai suoi oggetti. Si possono infatti dichiarare:
Ad esempio, abbiamo visto in diverse classi la dichiarazione del metodo public static void main(String [] args)che viene invocato quando si esegue la classe con il comando java. Per accedere ad una variabile statica di una classe, si usa la sintassi <nomeClasse>.<nomeVariabile>e analogamente per invocare un metodo statico, si scrive <nomeClasse>.<nomeMetodo>(<listaParametri>)Ad esempio, tutte le variabili e i metodi della classe Math [locale, Medialab, Sun] sono statici:
|
|
Lo schema generale di dichiarazione di una classe
in Java è il seguente:
Variabili e metodi (di istanza o statici) sono chiamati anche membri della classe. L'ordine delle dichiarazioni all'interno del corpo di una classe non è importante. |
|
La classe Student contiene variabili
e metodi sia statici che di istanza.
|
|
Il nome per invocarlo ha la forma <nomeClasse>.<nomeMetodo>. |
|
La seguente sequenza di comandi crea la collezione
di oggetti vista prima:
Si noti ancora una volta che le operazioni su variabili di tipo oggetto sono operazioni su riferimenti, non sugli oggetti stessi. Quindi, ad esempio, l'effetto del comando
|
|
Quando si scrivono i metodi e le variabili
di una classe, come si decide se devono essere statici o di istanza?
In generale, devono essere statici se codificano
le funzionalità o lo stato della classe, e quindi sono significativi
anche se non esiste alcun oggetto della classe.
Vediamo alcuni esempi più specifici, utili nella
pratica:
|
|
Abbiamo visto in molti casi che una dichiarazione
di variabile o metodo (sia statico che di istanza) può essere
preceduta dai modificatori public,
private,
o da nessuno dei due. Cosa significano?
Un esempio concreto. Vediamo come si può controllare l'accesso alle
variabili
name ed ID di un oggetto della
classe Student. Con l'uso del costruttore già visto,
le variabili name e ID vengono inizializzate
al momento della creazione. Ma poiché le variabili d'istanza sono
dichiarate public, è possibile una sequenza di comandi
come
che sarebbe chiaramente da evitare... |
|
Per impedire queste modifiche, possiamo dichiarale
private,
modificando la classe come segue:
Siccome ora le variabili d'istanza name
e ID sono dichiarate
private e il
loro valore viene inizializzato dal costruttore, non esiste alcun modo
di cambiarlo successivamente.
|