Jelenlegi hely

11.9. A példányok és az osztály tagok

Az osztályokról és az osztály tagokról már volt szó a nyelvi alapismeretek részben. Ez a rész bemutatja, hogy hogyan deklarálhatunk osztályt és osztálypéldányt. A következő osztály (AClass) deklarál egy példányváltozót, egy példánymetódust, egy osztályváltozót, egy osztály metódust, és végül a main metódust, ami szintén osztály metódus.

public class AClass {
    public int instanceInteger = 0;
    public int instanceMethod() {
        return instanceInteger;
    }
    public static int classInteger = 0;
    public static int classMethod() {
        return classInteger;
    }
    public static void main(String[] args) {
        AClass anInstance = new AClass();
        AClass anotherInstance = new Aclass();
        anInstance.instanceInteger = 1;
        anotherInstance.instanceInteger = 2;
        System.out.println(anInstance.instanceMethod());
        System.out.println(anotherInstance.instanceMethod());
        //System.out.println(instanceMethod());    //illegal
        //System.out.println(instanceInteger);     //illegal
        AClass.classInteger = 7;
        System.out.println(classMethod());
        System.out.println(anInstance.classMethod());
        anInstance.classInteger = 9;
        System.out.println(anInstance.classMethod());
        System.out.println(anotherInstance.classMethod());
    }
}

Itt látható a program kimenete:

1
2
7
7
9
9

Ha nincs egyéb meghatározás, akkor egy osztályon belül deklarált tag példány tag lesz. Így az instanceInteger és az instanceMethod mindketten példány tagok. A futtató rendszer a program összes példányváltozójából objektumonként készít egy példányt. Így az anInstance és az anotherInstance objektumok tartalmaznak egy-egy instanceInteger tagváltozót.

Hozzá tudunk férni a példányokhoz és meghívhatunk egy példánymetódust egy hivatkozáson keresztül. Ha az illegal felirattal megjelölt sorok elejéről kitöröljük a //-t, és megpróbáljuk lefordítani a programot, akkor egy hibaüzenetet kapunk.

Egy osztálytag a static módosítóval kerül deklarálásra. A main metóduson kívül az AClass deklarál egy osztályváltozót és egy osztálymetódust, melyeket classInteger-nek és classMethod-nak hívnak. A futtató rendszer osztályonként lefoglal egy osztályváltozót, függetlenül az osztály által lefoglalt példányok számától. A rendszer lefoglalja a memóriát az osztályváltozónak, legkésőbb akkor, amikor az először felhasználásra kerül.
Az osztály minden példányában elérhetőek az osztály osztályváltozói. Hozzáférhetünk az osztályváltozóhoz a példányokon keresztül, valamint az osztályon keresztül is. Hasonlóképpen egy osztály metódus is elérhető az osztályban vagy egy példányon keresztül. Megjegyezzük, hogyha a program megváltoztatja a classVariable értékét, akkor az megváltozik az összes osztálypéldányban is.