/* *************************************************************************
* Abbiamo visto come le classi siano una definizione astratta degli
* oggetti da istanziare, i quali poi avranno ognuno una copia personale
* sia dei metodi che delle variabili, per cui scrivendo in una variabile
* di un oggetto, non si cambia il valore delle copie di quella variabile
* negli altri oggetti istanza della stessa classe. Infatti se scriviamo
* in cane1.numerozampe non si modifica cane2.numerozampe, essendo queste
* due variabili indipendenti, e tra l'altro inaccessibili dall'esterno
* del proprio oggetto, essendo private.
* Pero' tale variabile si puo' definire statica, ossia si puo' fare in
* modo che tale variabile esista al massimo in una copia, anche se si
* istanziano svariati oggetti. In questo modo, tale variabile sara'
* condivisa da tutti gli oggetti istanziati dalla classe, e scrivere
* in essa da uno degli oggetti significhera' cambiarne il valore in tutti
* gli altri. Per dichiarare statica una variabile, basta usare "static":
*
* static int numerozampe;
*
* Vediamo il suo uso.
************************************************************************ */
import java.io.*; // Include le funzioni I/O standard di base.
/* ********************************************************************** */
public class Jlez10a { // Da qua inizia la classe Jlez10a
///////////////////////////////////////////////////////////////////////////
// Il main...
///////////////////////////////////////////////////////////////////////////
public static void main(String args[]) // Definiamo il metodo Main.
{ // Inizio del main()
// Istanzio 2 oggetti della classe animale
animale cane1 = new animale();
animale cane2 = new animale();
// Azzeriamo usando i 2 mettizampe (come se numerozampe non fosse static).
cane1.mettizampe(0); // Azzeriamo
cane2.mettizampe(0); // Non servirebbe, gia' azzerato prima.
// Scriviamo 40 in cane1.numerozampe
cane1.mettizampe(40); // In realta' abbiamo modificato anche cane2.
// Verifichiamo che la variabile, essendo static, e' una sola, condivisa,
// infatti sia cane1 che cane2 risulteranno avere 40 zampe.
System.out.println("\nStato del cane1: zampe = " + cane1.leggizampe());
System.out.println("Stato del cane2: zampe = " + cane2.leggizampe());
} // Fine del metodo principale Main()
} // Fine della classe Jlez10a
/* *************************************************************************
* Definiamo la classe animale. Generera' il file animale.class.
* Il compilatore dara' un warning (attenzione) perche' sarebbe preferibile
* separare il listato della classe e compilarlo a parte in un file
* chiamato animale.java. Comunque la compilazione avviene lo stesso.
************************************************************************ */
class animale { // Definisco la classe animale
private static int numerozampe=0; // Variabile privata STATICA
// Ora scriviamo i metodi pubblici della classe animale:
/*-------------------------------------------------------------------------*
* mettizampe: definisce il numero di zampe dell'animale.
* parametri: in entrata il num. di zampe in formato int.
*-------------------------------------------------------------------------*/
public void mettizampe(int l)
{
numerozampe = l; // Scrive il valore nella variabile privata "numerozampe".
}
/*-------------------------------------------------------------------------*
* leggizampe: legge e restituisce il num. di zampe dell'animale.
* parametri: in uscita il num. di zampe in formato int.
*-------------------------------------------------------------------------*/
public int leggizampe()
{
return numerozampe;
}
} // Fine della classe animale
/* *************************************************************************
* Fate molta attenzione all'uso di static, perche' cambia molto la logica
* di funzionamento delle classi. Se non sapeste che numerozampe e'
* static, leggendo solo il main vi aspettereste un risultato diverso.
************************************************************************ */