V tomto článku se podíváme, co je to konstruktor v Javě (constructor in java). K čemu se používá? Co je to?
Třída slouží k popisu a výrobě objektů. Zkusme nyní popřemýšlet nad reálným objektem – například auto. Pokud chceme popsat auto do programu, tak k popisu auta použijeme třídu.
Co má auto? Jaké vlastnosti? Má počet dveří, značku, RZ, objem kufru a dalších xy věcí. Ne všechny budeme používat. V našem projektu si vytvoříme novou třídu:
Pojmenujeme ji Auto a napíšeme tam globální proměnné.
public class Auto {
int doorCount;
String brand;
String plateNumber;
}
Nyní si vytvoříme objekt typu Auto. K výrobě objektů budeme používat konstruktor. Konstruktor jako název naznačuje slouží ke zkonstruování nového objektu.
Aniž bys ty sám napsal nějaký konstruktor, tak máš jeden dostupný automaticky. Tento se jmenuje – bezparametrický konstruktor – je to jakoby metoda, která na vstupu nemá parametry. Proto je možné vyrobit nový objekt pomocí new Auto();
public class Auto {
int doorCount;
String brand;
String plateNumber;
public static void main(String[] args) {
Auto auto = new Auto();
}
}
V programu jsme použili new Auto() i když nic takového nemáme napsáno. Co můžeme udělat, je napsat si takový konstruktor sami.
public class Auto {
int doorCount;
String brand;
String plateNumber;
public Auto() {
}
public static void main(String[] args) {
Auto auto = new Auto();
}
}
Do nitra tohoto konstruktoru si nyní můžeme napsat libovolný kód. Konstruktory se nejčastěji využívají vedle výroby nového objektu ik nastavení dat.
Například pokud chci vyrobit auto, které je značky Škoda, tak vyrobím nový – druhý konstruktor, jehož vstupní parametr bude právě počet dveří. Volat chceme Auto auto = new Auto(“Škoda”);
public Auto(String brand) {
}
Co ale uděláme s touto proměnnou brand, kterou máme jako parametr? Pokud uvažujeme, tak chceme nastavit globální proměnnou brand pro tento nový objekt. Ale jak řeknu, že globální proměnná brand ať se rovná tomu, co je v parametru metody brand?
Udělám to pomocí klíčového slova this. Slovo this se odkazuje na právě tento nový objekt, který konstruujeme. Tedy this se váže na nově vyrobený objekt ze třídy Auto. Po správnosti bych měl říci, že this odkazuje na instanci (instance) objektu. Pomocí konstruktoru vyrobíme novou instanci třídy Auto. Pokud vyrobím 5 objektů, tak jsem vyrobil 5 instancí třídy Auto. Takže this.brand ukazuje kam? Slovo this ukazuje na danou instanci objektu a přes tečku přistupuji k věcem dostupným v dané instanci auta. Co je tam k dispozici? Nyní jsou dostupné globální proměnné. Tak udělám:
public Auto(String brand) {
this.brand = brand;
}public static void main(String[] args) {
Auto auto = new Auto("Škoda");
}
Po zavolání tohoto konstruktoru mám v proměnné auto odkaz na objekt Auto s nastevním brandem na Škoda. Takto si nyní můžu vytvářet nové instance typu Auto.
public static void main(String[] args) {
Auto auto = new Auto("Škoda");
Auto auto2 = new Auto("Škoda");
}
Jsou tato dvě auta stejná? Ne, nejsou, i když mají stejný brand. Proč? Neboť voláme-li slovíčko new, tak se vytváří vždy zcela nový objekt v paměti. Ukázka konstruktoru, kde nastavujeme všechny globální proměnné. V IDEI stlač ALT+Insert a vyber konstruktor – následně označ všechny proměnné. Tyto proměnné se jinak nazývají také 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ářet kde chceš a kdy chceš. Teď jsem to dělal v metodě main přímo ve třídě Auto. To ale samozřejmě většinou dělat nebudeš. Více o konstruktorech v Javě a Java programování se dozvíš v našich online kurzech Java a OOP pro začátečníky a Java pro pokročilé.
🥇 Sme jednotka v online vzdelávaní na Slovensku. Na našom webe nájdeš viac ako 300 rôznych videokurzov z oblastí ako programovanie, tvorba hier, testovanie softwaru, grafika, UX dizajn, online marketing, MS Office a pod. Vyber si kurz, ktorý ťa posunie vpred ⏩