2013-03-24 47 views
5

So che se ho più istanze della stessa classe condivideranno tutte le stesse variabili di classe, quindi le proprietà statiche della classe useranno una quantità fissa di memoria, non importa quanto molti esempi della classe che ho.Variabili statiche Java e ereditarietà e memoria

La mia domanda è: Se ho un paio di sottoclassi di ereditare qualche campo statico dal loro superclasse, si condividono le variabili di classe o no?

E se no, qual è il modello/pratica migliore per assicurarsi che condividano le stesse variabili di classe?

risposta

15

Se ho un paio di sottoclassi che ereditano un certo campo statico dalle loro superclasse, faranno condividere le variabili di classe o no?

Sì. Condivideranno le stesse variabili di classe nell'applicazione corrente in esecuzione in un unico Classloader.
Ad esempio si consideri il codice indicato di seguito, questo vi darà giusta idea della condivisione della variabile di classe per ciascuna delle sue sottoclassi ..

class Super 
{ 
    static int i = 90; 
    public static void setI(int in) 
    { 
     i = in; 
    } 
    public static int getI() 
    { 
     return i; 
    } 
} 
class Child1 extends Super{} 
class Child2 extends Super{} 
public class ChildTest 
{ 
    public static void main(String st[]) 
    { 
     System.out.println(Child1.getI()); 
     System.out.println(Child2.getI()); 
     Super.setI(189);//value of i is changed in super class 
     System.out.println(Child1.getI());//same change is reflected for Child1 i.e 189 
     System.out.println(Child2.getI());//same change is reflected for Child2 i.e 189 
    } 
} 
6

Tutte le istanze di tale classe o sotto-classe di azioni gli stessi campi statici per un caricatore di classe dato.

Nota: se si carica la stessa classe più di una volta in caricatori di classi multiple, ciascun caricatore di classi dispone della propria copia dei campi statici.

0

Sì, tutte le gerarchie di classi (stessa classe e tutte le istanze di classi secondarie) condividono la stessa variabile statica. Poiché JAVA non supporta la variabile globale ma è possibile utilizzare la variabile statica come variabile Global senza violazione dei concetti OOP.

Se il valore della variabile statica è stato modificato da una classe, lo stesso valore modificato è stato replicato su tutte le classi che utilizzano questa variabile.

Problemi correlati