Co je to konstruktor v Javě a jak jej používáte?

Co je to konstruktor v Javě a jak jej používáte?

V objektově orientovaném programování je konstruktor speciální funkcí, 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. Konstruktéři Java mohou k zajištění alternativního chování používat přetížení. Konstruktory v Javě mohou také využít dědičnost k opětovnému použití kódu.





Proč vůbec potřebujete konstruktéry?

Konstruktory jsou základem objektově orientovaného programování a Java není výjimkou. Tento příklad ukazuje, jak lze definovat základní třídu Circle pomocí jedné datové vlastnosti a jedné metody:





public class Circle {
public double radius;
public double area() { return 3.14159 * radius * radius; }
}

Poté můžete vytvořit instanci této třídy a komunikovat s ní:

Circle c = new Circle();
c.radius = 2;
System.out.println(c.area()); // 12.56636

To je ale méně pohodlné a robustní, než by mohlo být. Je dobrým objektově orientovaným postupem zapouzdření dat a jejich ochrana před neoprávněným přístupem:



public class Circle {
private double radius;
public double area() { return 3.14159 * radius * radius; }
public void setRadius(double r) { radius = r; }
}

Nyní může volací kód použít setRadius metody a nemusíte si dělat starosti s detaily její implementace:

co znamená emoji při psaní textových zpráv?
Circle c = new Circle();
c.setRadius(2);

Konstruktory nabízejí ještě lepší způsob dodávání dat k objektu při jeho vytváření. Velmi často se používají k inicializaci vlastností, jako je například poloměr tady.





Příklady jednoduchých konstruktorů

Nejzákladnějším konstruktorem je konstruktor bez argumentů, který nedělá nic:

public class Circle {
public Circle() {}
}

Viz také: Naučte se vytvářet třídy v Javě





Pokud nedefinujete konstruktor, Java poskytne výchozí, který se chová stejným způsobem.

Všimněte si několika věcí:

  1. Název konstruktoru odpovídá názvu třídy.
  2. Tento konstruktor používá veřejnost modifikátor přístupu, takže jej může volat jakýkoli jiný kód.
  3. Konstruktor neobsahuje návratový typ. Na rozdíl od jiných metod nemohou konstruktory vrátit hodnotu.

Konstruktory obvykle provádějí nějaký druh inicializace. Všimněte si, že výše uvedený kód neinicializuje hodnotu poloměru. V takovém případě jej jazyk automaticky nastaví na nulu. Tato třída očekává, že ji uživatel použije setRadius () . Chcete -li použít užitečnější výchozí hodnotu než 0, můžete ji přiřadit v konstruktoru:

public class Circle {
public Circle() { radius = 1; }
}

Kruhy vytvořené touto třídou budou mít alespoň nyní skutečnou plochu! Volající může stále používat setRadius () poskytnout poloměr jiný než 1. Ale konstruktor může být ještě přívětivější:

public class Circle {
public Circle(double r) { radius = r; }
}

Nyní můžete hned od narození vytvářet kruhy se specifickým poloměrem:

jak odstranit staré ovladače Windows 10
Circle c = new Circle(2);
System.out.println(c.area()); // 12.56636

Toto je velmi běžné použití pro konstruktory. Často je použijete k inicializaci proměnných na hodnoty parametrů.

Přetížení konstruktéra

V definici třídy můžete zadat více než jeden konstruktor:

public Circle() { radius = 1; }
public Circle(double r) { radius = r; }

To dává volajícímu kódu na výběr, jak konstruovat objekty:

Circle c1 = new Circle(2);
Circle c2 = new Circle();
System.out.println(c1.area() + ', ' + c2.area()); // 12.56636, 3.14159

S trochu složitějším kruhem můžete prozkoumat více zajímavých konstruktorů. Tato verze ukládá svou pozici:

public class Circle {
public double x, y, radius;
public Circle() { radius = r; }
public Circle(double r) { radius = r; }
public Circle(double x, double y, double r) {
this.x = x; this.y = y; radius = 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ězec konstruktérů

Co takhle vytvořit jeden kruh založený na jiném? To by nám dalo možnost 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. Protož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 od druhého. Využívá méně kódu a pomáhá centralizovat operaci, nikoli ji duplikovat.

Volání nadřízeného konstruktéra

K jiné formě řetězení konstruktoru dochází, když konstruktor volá konstruktor své nadřazené třídy. To může být explicitní nebo implicitní. Chcete -li explicitně zavolat nadřazený konstruktor, použijte super klíčové slovo:

super(x, y);

Představte si třídu Shape, která působí jako rodič kruhu:

public class Shape {
double x, y;
public Shape(double _x, double _y) { x = _x; y = _y; }
}

Zpracovává společné polohování pro všechny tvary, protože to je funkce, kterou všichni sdílejí. Nyní může třída Circle delegovat zpracování polohy na svého rodiče:

public class Circle extends Shape {
double radius;
public Circle(double r) { super(0, 0); radius = r; }
public Circle(double x, double y, double r) {
super(x, y);
radius = r;
}
}

Konstrukce nadtřídy je velmi důležitým aspektem dědičnost v Javě . Jazyk to ve výchozím nastavení vynucuje, pokud výslovně nezavoláte super ve vašich konstruktérech.

Modifikátory přístupu na konstruktérech

Konstruktoři mohou do svého podpisu zahrnout modifikátor přístupu. Stejně jako ostatní metody, toto definuje, které typy volajících mají přístup ke konstruktoru:

public class Test {
private static Test uniqueInstance = new Test();
private Test() { }
public static Test getInstance() {
return uniqueInstance;
}
}

Toto je komplikovanější příklad, proto jej pochopte:

  • 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 zpřístupňuje volajícím jednu jedinečnou instanci.

K vytváření objektů použijte konstruktory v Javě

Konstruktory jsou životně důležité pro objektově orientované programování. Umožňují vám vytvářet objekty, což je zásadní!

V Javě vypadají konstruktory jako jiné metody a fungují téměř stejně. 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 Javy, které byste se měli naučit na začátku.

Podíl Podíl tweet E-mailem 10 základních konceptů Javy, které byste se měli naučit na začátku

Ať už píšete GUI, vyvíjíte software na straně serveru nebo mobilní aplikaci využívající Android, učení se Javě vám dobře poslouží. Zde jsou některé základní koncepty Java, které vám pomohou začít.

Číst dále
Související témata
  • Programování
  • Jáva
  • Tipy pro kódování
O autorovi Bobby Jack(58 článků zveřejněno)

Bobby je technologický nadšenec, který pracoval jako vývojář softwaru po téměř dvě desetiletí. Je zapálený pro hraní her, pracuje jako editor recenzí časopisu Switch Player Magazine a je ponořen do všech aspektů online publikování a webového vývoje.

jak stáhnout flash hru
Více od Bobbyho Jacka

Přihlaste se k odběru našeho zpravodaje

Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné elektronické knihy a exkluzivní nabídky!

Kliknutím sem se přihlásíte k odběru