V objektově orientovaném programování je konstruktor speciální funkce, kterou voláte k vytvoření objektu. Konstruktory mají několik jedinečných funkcí, které jim umožňují pracovat.
V Javě pojmenujete konstruktor podle jeho třídy. Konstruktor je metoda definovaná ve třídě, na kterou se vztahuje. Konstruktory Java mohou použít přetížení k zajištění alternativního chování. Konstruktéři v Javě mohou také využít dědičnost k opakovanému použití kódu.
Proč vlastně potřebujete konstruktéry?
Konstruktéři jsou oporou objektově orientované programovánía Java není výjimkou. Tento příklad ukazuje, jak můžete definovat základní třídu Circle s jednou datovou vlastností a jednou metodou:
veřejná třída Circle {
veřejný dvojitý poloměr;
public double area () {return 3.14159 * radius * radius; }
}
Poté můžete vytvořit instanci této třídy a pracovat s ní:
Kruh c = nový kruh ();
c. poloměr = 2;
System.out.println (c.area ()); // 12.56636
Ale to je méně pohodlné a robustní, než by mohlo být. Je dobrým objektově orientovaným postupem zapouzdřit data a chránit je před neoprávněným přístupem:
veřejná třída Circle {
soukromé dvojitý poloměr;
public double area () {return 3.14159 * radius * radius; }
public void setRadius (double r) {radius = r; }
}
Nyní může volací kód používat setRadius metodu a nemusíte si dělat starosti s její implementací:
Kruh c = nový kruh ();
c.setRadius (2);
Konstruktory nabízejí ještě lepší způsob dodávání dat do objektu, když jej vytvoříte. Velmi často se používají k inicializaci vlastností, jako je poloměr tady.
Příklady jednoduchých konstruktorů
Nejzákladnějším konstruktorem je jeden bez argumentů, který nedělá nic:
veřejná třída Circle {
public Circle () {}
}
Viz také: Naučte se, jak vytvářet třídy v Javě
Pokud nedefinujete konstruktor, Java poskytne výchozí, který se chová stejným způsobem.
Všimněte si pár věcí:
- Název konstruktoru odpovídá názvu třídy.
- Tento konstruktor používá veřejnost modifikátor přístupu, takže jej může volat jakýkoli jiný kód.
- Konstruktor neobsahuje návratový typ. Na rozdíl od jiných metod nemohou konstruktory vrátit hodnotu.
Konstruktéři obvykle provádějí nějakou inicializaci. Všimněte si, že výše uvedený kód neinicializuje hodnotu poloměru. V tomto případě jej jazyk automaticky nastaví na nulu. Tato třída očekává, že uživatel bude používat setRadius (). Chcete-li použít užitečnější výchozí hodnotu než 0, můžete ji přiřadit v konstruktoru:
veřejná třída Circle {
public Circle () {radius = 1; }
}
Kruhy vytvořené touto třídou budou mít alespoň nyní skutečnou oblast! Volající může i nadále používat setRadius () poskytnout jiný poloměr než 1. Ale konstruktor může být ještě přátelštější:
veřejná třída Circle {
public Circle (double r) {radius = r; }
}
Nyní můžete vytvářet kruhy se specifickým poloměrem hned od narození:
Kruh c = nový kruh (2);
System.out.println (c.area ()); // 12.56636
Toto je velmi běžné použití pro konstruktéry. Často je použijete k inicializaci proměnných na hodnoty parametrů.
Přetížení konstruktéra
V definici třídy můžete určit více než jeden konstruktor:
public Circle () {radius = 1; }
public Circle (double r) {radius = r; }
To dává volajícímu kódu volbu, jak konstruovat objekty:
Kruh c1 = nový kruh (2);
Kruh c2 = nový kruh ();
System.out.println (c1.area () + "," + c2.area ()); // 12.56636, 3.14159
S trochu složitějším kruhem můžete prozkoumat zajímavější konstruktory. Tato verze ukládá svou pozici:
veřejná třída Circle {
veřejné zdvojnásobení x, y, poloměr;
public Circle () {radius = r; }
public Circle (double r) {radius = r; }
public Circle (double x, double y, double r) {
this.x = x; this.y = y; poloměr = r;
}
public double area () {return 3.14159 * radius * radius; }
}
Nyní můžete vytvořit kruh bez argumentů, jednoho poloměru nebo souřadnic x a y podél poloměru. Jedná se o stejný druh přetížení, který Java podporuje pro jakoukoli metodu.
Řetězení konstruktérů
Co takhle vytvořit jeden kruh na základě jiného? To by nám dalo schopnost snadno kopírovat kruhy. Dodržujte následující blok:
public Circle (Circle c) {
this.x = c.x;
this.y = c.y;
this.radius = c.radius;
}
To bude fungovat, ale zbytečně to opakuje nějaký kód. Vzhledem k tomu, že třída Circle již má konstruktor, který zpracovává jednotlivé vlastnosti, můžete místo toho volat pomocí tento klíčové slovo:
public Circle (Circle c) {
this (c.x, c.y, c.radius);
}
Toto je jedna forma řetězení konstruktorů, která volá jeden konstruktor z jiného. Používá méně kódu a pomáhá centralizovat operaci, než ji duplikovat.
Volání nadřazeného konstruktoru
Další forma řetězení konstruktoru nastane, když konstruktor zavolá konstruktor své nadřazené třídy. Může to být explicitní nebo implicitní. Chcete-li explicitně volat nadřazený konstruktor, použijte super klíčové slovo:
super (x, y);
Představte si třídu Shape, která funguje jako nadřazený kruh:
public class Shape {
dvojité x, y;
public Shape (double _x, double _y) {x = _x; y = _y; }
}
Zpracovává společné umístění pro všechny tvary, protože to je funkce, kterou všichni sdílejí. Třída Circle nyní může delegovat manipulaci s pozicí na svého rodiče:
veřejná třída Circle rozšiřuje tvar {
dvojitý poloměr;
public Circle (double r) {super (0, 0); poloměr = r; }
public Circle (double x, double y, double r) {
super (x, y);
poloměr = r;
}
}
Konstrukce nadtřídy je velmi důležitým aspektem dědičnost v Javě. Jazyk ve výchozím nastavení vynucuje, pokud výslovně nezavoláte super ve vašich konstruktérech.
Modifikátory přístupu na konstruktorech
Konstruktory mohou do svého podpisu zahrnout modifikátor přístupu. Stejně jako ostatní metody to definuje, které typy volajícího mají přístup ke konstruktoru: Like other methods, this defines which types of caller can access the constructor:
test veřejné třídy {
soukromý statický test uniqueInstance = nový Test ();
soukromý test () {}
veřejný statický test getInstance () {
vrátit uniqueInstance;
}
}
Toto je složitější příklad, takže mu rozumějte:
- Třída není abstraktní, takže je možné z ní vytvořit instanci.
- Konstruktor je soukromý, takže pouze tato třída sama může vytvořit novou instanci.
- Prostřednictvím statické vlastnosti a metody třída vystavuje volajícím jedinou jedinečnou instanci sebe sama.
Pomocí konstruktorů v Javě můžete vytvářet objekty
Konstruktory jsou životně důležité pro objektově orientované programování. Umožní vám vytvářet objekty, což je zásadní!
V Javě vypadají konstruktéři jako jiné metody a fungují podobně. Měli byste si pamatovat speciální pravidla týkající se výchozích konstruktorů, přetížení a řetězení konstruktorů. Pokud jsou pro vás konstruktéři noví, možná si budete chtít přečíst další základní koncepty Java, které byste se měli při zahájení naučit.
Ať už píšete GUI, vyvíjíte software na straně serveru nebo mobilní aplikaci pomocí systému Android, učení jazyka Java vám poslouží dobře. Zde je několik základních konceptů Java, které vám pomohou začít.
Přečtěte si další
- Programování
- Jáva
- Tipy pro kódování
Bobby je technologický nadšenec, který většinu softwarových vývojářů pracoval téměř dvě desetiletí. Je vášnivým hráčem, pracuje jako recenzent časopisu Switch Player Magazine a je ponořen do všech aspektů online publikování a vývoje webových stránek.
Přihlaste se k odběru našeho zpravodaje
Připojte se k našemu zpravodaji s technickými tipy, recenzemi, bezplatnými elektronickými knihami a exkluzivními nabídkami!
Ještě jeden krok…!
V e-mailu, který jsme vám právě poslali, potvrďte svou e-mailovou adresu.