Blog

Konštruktory v Jave

Learn2Code tím - 03.04.2020 - Vzdělávání

V tomto článku sa pozrieme, čo je to konštruktor v Jave (constructor in java). Na čo sa používa? Čo je to?

Trieda slúži na opis a výrobu objektov. Skúsme teraz porozmýšľať nad reálnym objektom – napríklad auto. Ak chceme opísať auto do programu, tak na opis auta použijeme triedu.

Čo má auto? Aké vlastnosti? Má počet dverí, značku, EČV, objem kufra a ďalších xy vecí. Nie všetky budeme používať. V našom projekte si vytvoríme novú triedu:

Pomenujeme ju Auto a napíšeme tam globálne premenné.

public class Auto {
    int doorCount;
    String brand;
    String plateNumber;
}

Teraz si vytvoríme objekt typu Auto. Na výrobu objektov budeme používať konštruktor. Konštruktor ako názov naznačuje slúži na skonštruovanie nového objektu. Bez toho, aby si ty sám napísal nejaký konštruktor, tak máš jeden dostupný automaticky. Tento sa volá – bezparametrický konštruktor – je to akoby metóda, ktorá na vstupe nemá parametre. Preto je možné vyrobiť nový objekt pomocou new Auto();

public class Auto {
    int doorCount;
    String brand;
    String plateNumber;
    public static void main(String[] args) {
        Auto auto = new Auto();
    }
}

V programe sme použili new Auto() aj keď nič takéto nemáme napísané. Čo môžeme spraviť, je napísať si takýto konštruktor sami.

public class Auto {
    int doorCount;
    String brand;
    String plateNumber;
    public Auto() {
    }
    public static void main(String[] args) {
        Auto auto = new Auto();
    }
}

Do vnútra tohto konštruktoru si môžeme teraz napísať ľubovoľný kód. Konštruktory sa najčastejšie využívajú popri výrobe nového objektu aj k nastaveniu dát. Napríklad, ak chcem vyrobiť auto, ktoré je značky Škoda, tak vyrobím nový – druhý konštruktor, ktorého vstupný parameter bude práve počet dverí. Volať chceme Auto auto = new Auto(“Škoda”);

public Auto(String brand) {
}

Čo ale spravíme s touto premennou brand, ktorú máme ako parameter? Ak pouvažujeme, tak chceme nastaviť globálnu premennú brand pre tento nový objekt. Ale ako poviem, že globálna premenná brand nech sa rovná tomu, čo je v parametry metódy brand?

Spravím to pomocou kľúčového slova this. Slovo this sa odkazuje na práve tento nový objekt, ktorý konštruujeme. Teda this sa viaže na novo vyrobený objekt z triedy Auto. Po správnosti by som mal povedať, že this odkazuje na inštanciu (instance) objektu. Pomocou konštruktoru vyrobíme novú inštanciu triedy Auto. Ak vyrobím 5 objektov, tak som vyrobil 5 inštancií triedy Auto. Takže this.brand ukazuje kam? Slovo this ukazuje na danú inštanciu objektu a cez bodku pristupujem k veciam dostupným v danej inštancii auta. Čo je tam dostupné? Teraz sú dostupné globálne premenné. Tak spravím:

public Auto(String brand) {
    this.brand = brand;
}
public static void main(String[] args) {
    Auto auto = new Auto("Škoda");
}

Po zavolaní tohto konštruktoru mám v premennej auto odkaz na objekt Auto s nastevným brand na Škoda. Takto si teraz môžem vytvárať nové inštancie typu Auto.

public static void main(String[] args) {
    Auto auto = new Auto("Škoda");
    Auto auto2 = new Auto("Škoda");
}

Sú tieto dve autá rovnaké? Nie, nie sú, aj keď majú taký istý brand. Prečo? Lebo ak voláme slovíčko new, tak sa vytvára vždy úplne nový objekt v pamäti. Ukážka konštruktoru, kde nastavujeme všetky globálne premenné. V IDEI stlač ALT+Insert a vyber konštruktor – následne označ všetky premenné. Tieto premenné sa inak nazývajú aj fieldy.

public Auto(int doorCount, String brand, String plateNumber) {
    this.doorCount = doorCount;
    this.brand = brand;
    this.plateNumber = plateNumber;
}
public static void main(String[] args) {
    Auto auto = new Auto("Škoda");
    Auto auto2 = new Auto("Škoda");
    Auto auto3 = new Auto(4, "Opel", "CCdddDD");
}

Nové objekty môžeš vytvárať kde chceš a kedy chceš. Teraz som to robil v metóde main priamo v triede Auto. To ale samozrejme väčšinou robiť nebudeš.

Viac o konštruktoroch v Jave a Java programovaní sa dozvieš v našich online kurzoch Java a OOP pre začiatočníkov a Java pre pokročilých. Ak máš nejaké otázky k tomuto blogu, napíš ich do komentárov 👇



Logo facebook

Learn2Code tím

Učíme ľudí dizajnovať, robiť webstránky a programovať. Naše prezenčné kurzy nájdeš vo viacerých mestách na Slovensku a pomocou online kurzov sa môžeš vzdelávať z pohodlia domova.


Kolekcie v Jave

Vzdělávání

V tomto úvodnom článku do série pokročilá java sa pozrieme na zúbok kolekciám (collections in java). Kolekcie sú akoby kontajnery, ktoré v sebe držia...

Kotlin vs. Java - menej kódu

Vzdělávání

Kotlin a Java sú kompatibilné programovacie jazyky. V tom zmysle, že ak skompilujeme Java kód, tak sa vytvorí bytecode v súbore .class. Ak skompilujem...

Testovanie Java aplikácií s JUnit

Vzdělávání

JUnit framework úvod Predstav si úplne jednoduchú metódu, ktorá má za úlohu spočítať dva vstupné parametre metódy. public static int sum(int...