2013-03-24 14 views
5

Ich weiß, dass wenn ich mehrere Instanzen der gleichen Klasse habe alle die gleichen Klassenvariablen teilen, so dass die statischen Eigenschaften der Klasse eine feste Menge an Speicher verwenden, egal wie viele Beispiele der Klasse, die ich habe.Java Statische Variablen und Vererbung und Speicher

Meine Frage ist: Wenn ich ein Paar Unterklassen erben einige statische Feld von ihrer Oberklasse, werden sie die Klassenvariablen teilen oder nicht?

Und wenn nicht, was ist das beste Verfahren/Muster, um sicherzustellen, dass sie die gleichen Klassenvariablen teilen?

Antwort

15

Wenn ich ein paar Subklassen erben einige statische Feld von ihren geordneten Klasse haben, werden sie die Klassenvariablen oder nicht teilen?

Ja Sie werden die gleichen Klassenvariablen über die aktuell laufende Anwendung in einem einzelnen Classloader teilen.
Zum Beispiel den Code betrachten unten angegeben ist, wird diese Ihnen recht gute Vorstellung von der gemeinsamen Nutzung von Klassenvariablen von jedem ihrer Subklassen ..

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

alle Instanzen dieser Klasse oder Unterklasse Aktie geben die gleichen statischen Feldern für einen gegebenen Klassenlader.

Hinweis: Wenn Sie dieselbe Klasse mehrmals in mehreren Klassenladeprogrammen laden, verfügt jedes Klassenladeprogramm über eine eigene Kopie statischer Felder.

0

Ja, alle Klassenhierarchien (dieselbe Klasse und alle untergeordneten Klassen) teilen sich dieselbe statische Variable. Da JAVA die globale Variable nicht unterstützt, können Sie die statische Variable als globale Variable verwenden, ohne OOP-Konzepte zu verletzen.

Wenn Sie den Wert der statischen Variablen von einer Klasse geändert haben, wird derselbe geänderte Wert in alle Klassen repliziert, die diese Variable verwenden.