Jelenlegi hely

11.4. Konstruktorok

Minden osztályban van legalább egy konstruktor. A konstruktor inicializálja az új objektumot. A neve ugyanaz kell, hogy legyen, mint az osztályé. Például a Bicycle nevű egyszerű osztálynak a konstruktora is Bicycle:

    public Bicycle(int startCadence, int startSpeed,
                   int startGear) {
        gear = startGear;
        cadence = startCadence;
        speed = startSpeed;
    }

Ebben a példában a konstruktor a paraméter alapján tudja létrehozni a kívánt méretű tömböt.

A konstruktor nem metódus, így nincs visszatérő típusa. A konstruktor a new operátor hatására hívódik meg, majd visszaadja a létrejött objektumot. Egy másik konstruktor csupán a 0 kezdőértékeket állítja be:

    public Bicycle() {
        gear = 0;
        cadence = 0;
        speed = 0;
    }

Mindkét konstruktornak ugyanaz a neve (Bicycle), de a paraméterlistájuk különböző. A metódusokhoz hasonlóan a konstruktorokat is megkülönbözteti a Java platform a paraméterek száma és típusa alapján. Ezért nem írhatunk két ugyanolyan paraméterlistával rendelkező konstruktort. (Különben a fordító nem lenne képes őket megkülönböztetni, így fordítási hibát adna.)

Amikor létrehozunk egy osztályt, meg kell adnunk, hogy az egyes példányok milyen konstruktorokkal legyen létrehozhatók. A korábban bemutatott Rectangle osztály négy konstruktort tartalmaz, és így lehetővé teszi a különböző inicializálási lehetőségek közti választást.

Nem kell konstruktorokat írni az osztályainkhoz, ha úgy is el tudja látni a feladatát. A rendszer automatikusan létrehoz egy paraméter nélküli konstruktort, különben nem tudnánk példányt létrehozni.

A konstruktor deklarációjánál használhatjuk a következő hozzáférési szinteket:

  • private Csak ez az osztály használhatja ezt a konstruktort. Ha minden konstruktorok privát, akkor az osztályban lehet egy publikus osztály metódus, mely létrehoz és inicializál egy példányt.
  • protected Az osztály és leszármazott osztályai, valamint az osztállyal azonos csomagban elhelyezkedő osztályok használhatják ezt a konstruktort.
  • public Minden osztály használhatja ezt a konstruktort.
  • nincs megadva: Csak az osztállyal azonos csomagban elhelyezkedő osztályokból lesz elérhető ez a konstruktor.