esatto piccolo esempio
codice:
public class Persona
{
public String nome; //Prima variabile di Istanza pubblica
private int eta; //Seconda variabile di Istanza privata
public static int numero; //Variabile di Classe (senza senso ma per farti un esempio)
public Persona(String nome, int eta)//Costruttore
{
numero++;
this.nome=nome;
if(eta>=0)
{
this.eta=eta;
}
else
{
this.eta=0;//ma si può anche lanciare eccezione per bloccare tutto
}
}
public void stampaPersona()
{
System.out.println("Nome "+nome+" - Eta "+eta+" - Numero "+numero);
}
public int getEta()
{
return eta;
}
public void setEta(int eta)
{
if(eta>=0)
{
this.eta=eta;
}
else
{
this.eta=0;//ma si può anche lanciare eccezione per bloccare tutto
}
}
}
lo stato di una istanza della classe Persona è quindi dovuta alla coppia di valore nome,età e non da numero che è una variaible di classe e non è neanche necessario che esista una istanza per poterla usare. Per esempio
codice:
public static void main(String[] args)
{
Persona.numero=6;
System.out.println(Persona.numero);//Output 6 (ancora non istanziato nessun
//oggetto ma posso usare numero, se tentassi di fare Persona.nome="Pippo" riceverei
//un errore perchè se anche nome è pubblico deve essere associato a una istanza
Persona pluto=new Persona("Pluto",23); //Stato di pluto (pluto,23)
System.out.println(Persona.numero);//Output 7 (incrementato dal costruttore)
pluto.stampaPersona();//Output Nome pluto - eta 23 - numero 7
//se ora tenti di fare pulto.eta=-3; ti verrà dato un errore in compilazione
//poichè eta è una variabile privata e questo è una forma di controllo
//per chi utilizzerà la mia classe Persona puoi invece fare
pluto.setEta(-3);//eta verà settata a 0 non esiste una persona con eta negativa
pluto.stampaPersona();//Output Nome pluto - eta 0 - numero 7
//come si può notare una istanza può variare stato nel corso del programma
//nuovo stato di pluto (pluto,0)
Persona pippo=new Persona("topolino",2); //Stato di pippo (topolino,2)
System.out.println(Persona.numero);//Output 8 (incrementato dal costruttore)
pippo.stampaPersona();//Output Nome topolino - eta 2 - numero 8
pluto.stampaPersona();//Output Nome pluto - eta 0 - numero 8
//si puo notare che numero non dipende dalle istanze ma numero
// è una variabile della classe Persona e ce n'è solo una quindi
//comunque la si stampi il valore è unico
}
spero di essere stato il + chiaro possibile ciao ciao