Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    variabile di una classe

    Scusate ma non ho capito la differenza tra 2 modi di dichiarare una variabile di una classe.
    Mettiamo che io crei una classe Persona. Cosa cambia tra queste 2 dichiarazioni?
    codice:
    public class Persona {
    	static private int eta=0, altezza=0;}
    codice:
    public class Persona {
    	private int eta=0, altezza=0;}
    A vista provandole mi pare si comportino allo stesso modo.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,319
    La differenza è enorme.
    Nel primo caso le due variabili sono di classe (modificatore static). Ciò significa che qualunque istanza della classe persona avrà gli stessi identici valori per quelle variabili (e la cosa non è affatto corretta: due persone diverse dovrebbero poter avere età e altezza diversa).

    Il secondo caso, invece, è corretto: le due variabili sono di istanza (non static) e così facendo ciascuna istanza della classe avrà i propri valori (diversi per ciascuna istanza).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    prova così vedrai la differenza.

    codice:
    Class Persona
    {
        static private int eta=0;
    
        public Persona(int eta)
        {
             this.eta=eta;
        }
        
        public void printEta()
        {
             System.out.println("Eta:"+this.eta);
        }
        
        public static void main(String [ ] args)
        {
          Persona a = new Persona(12);
          Persona b= new Persona (20);
          a.printEta();
        }
    }
    


    prova con static e senza static
    Ultima modifica di bstefano79; 08-03-2016 a 12:19

  4. #4
    capito perfettamente, siete troppo forti, dovevo iscrivermi prima a questa forum.

  5. #5
    Altra domanda, sono arrivato a studiare le sottoclassi. Ora mi ritrovo con il problema di dover modificare il valore di una variabile della superclasse (di una istanza della classe intendo) che però ho definito come Private. Se la dichiarassi come public non avrei problemi, però poi sarebbe visibile anche nel main o cmq in altre classi. Avevo pensato a usare un costruttore nella superclasse e richiamarlo nella sottoclasse, ma da quel che vedo non mi pare sia possibile visto che penso che i costruttori si possono usare solo con gli oggetti creati. Come si procede quindi?
    @LeleFT @bstefano79

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,319
    Sarebbe meglio aprire una discussione separata, visto che il problema è cambiato.

    Ad ogni modo hai due approcci possibili (in base alle esigenze).

    1) Se la variabile è privata, allora dovresti fornire dei "meccanismi" per poterla modificare dall'esterno: a questo servono i cosiddetti metodi accessori (da "accesso", cioè che servono ad accedere ad informazioni private); sono i cosiddetti metodi getter e setter: i metodi getter consentono di "ottenere" il valore, i metodi setter consentono di "modificare" il valore.

    2) Se intravedi la possibilità di consentire la modifica di tale valore solo alle sottoclassi, allora puoi dichiarare tale variabile come "protected". Questo significa che solo le sottoclassi possono avere accesso (e, quindi, possono modificare) a tale variabile (vale la stessa cosa anche per i metodi)


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    chiedo scusa per non aver aperto un'altra discussione, per le prossime lo farò. Ho provato con li "protected" però le variabili sono cmq visibili anche nel main. Nella pratica mi sembra uguale al public, ergo, mi deve sfuggire qualcosa.

  8. #8
    Cmq sto familiarizzando con get/set, penso di aver capito come fare. Grazie.

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,319
    Se la classe col main è nello stesso package allora sì, vede anche i membri protected.
    A questo indirizzo trovi una tabellina riassuntiva dove vengono elencati tutti i modificatori di accesso e chi ha visibilità con quel modificatore.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Lavorando con le classi mi è venuto un dubbio, nel caso io scrivessi il codice seguente cosa sto facendo? Pensavo di avere un errore ma no. Quindi vorrei capire quando creo un oggetto con questo costruttore questi 2 valori che fine fanno? Rimangono nella ram senza far niente?
    codice:
    public class Rettangolo {    
        public Rettangolo(int x, int y)
        {}
        }
    @LeleFT

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.