Az objektum-orientált programozás során a konstruktor egy speciális funkció, amelyet egy objektum létrehozásához hív meg. A konstruktorok számos egyedi funkcióval rendelkeznek, amelyek lehetővé teszik a működést.
Java nyelven konstruktőrt nevez el az osztálya alapján. A konstruktor egy módszer, amely abban az osztályban van definiálva, amelyre vonatkozik. A Java konstruktorok túlterhelést használhatnak alternatív viselkedés biztosítására. A Java konstruktőrei az öröklést is felhasználhatják a kód újrafelhasználásához.
Miért van szükség konstruktorokra?
A konstruktorok az objektum-orientált programozás alappillérei, és a Java sem kivétel. Ez a példa bemutatja, hogyan definiálhat egy alapvető körosztályt egy adattulajdonsággal és egy módszerrel:
public class Circle {
public double radius;
public double area() { return 3.14159 * radius * radius; }
}
Ezután létrehozhat egy példányt ebből az osztályból, és kölcsönhatásba léphet vele:
Circle c = new Circle();
c.radius = 2;
System.out.println(c.area()); // 12.56636
De ez kevésbé kényelmes és robusztus, mint lehetne. Jó objektum-orientált gyakorlat az adatok beágyazása, védve az illetéktelen hozzáféréstől:
public class Circle {
private double radius;
public double area() { return 3.14159 * radius * radius; }
public void setRadius(double r) { radius = r; }
}
Most a hívó kód használhatja a setRadius módszerrel, és nem kell aggódnia a megvalósítás részletei miatt:
hogyan kényszerítsük bezárni az ablakokat
Circle c = new Circle();
c.setRadius(2);
A konstruktorok még jobb módot kínálnak arra, hogy adatokat hozzon létre egy objektumnak létrehozásakor. Nagyon gyakran használják olyan tulajdonságok inicializálására, mint a sugár itt.
Példák egyszerű konstruktorokra
A legalapvetőbb konstruktor az, akinek nincsenek érvei, és nem tesz semmit:
public class Circle {
public Circle() {}
}
Lásd még: Ismerje meg, hogyan hozhat létre osztályokat Java -ban
Ha nem definiál konstruktőrt, a Java alapértelmezettet biztosít, amely ugyanúgy viselkedik.
Vegye figyelembe néhány dolgot:
- A konstruktor neve megegyezik az osztály nevével.
- Ez a konstruktor a nyilvános hozzáférési módosítót, így bármely más kód hívhatja.
- A konstruktor nem tartalmaz visszatérési típust. Más módszerekkel ellentétben a konstruktorok nem adhatnak vissza értéket.
A konstruktorok általában valamilyen inicializálást végeznek. Vegye figyelembe, hogy a fenti kód nem inicializálja a sugár értékét. Ebben az esetben a nyelv automatikusan nullára állítja. Ez az osztály elvárja a felhasználótól, hogy használja setRadius () . Ha 0 -nál hasznosabb alapértelmezettet szeretne használni, hozzárendelheti azt a konstruktoron belül:
public class Circle {
public Circle() { radius = 1; }
}
Az ezzel az osztállyal létrehozott körök legalább most tényleges területtel rendelkeznek! A hívó továbbra is használhatja setRadius () hogy az 1 -től eltérő sugarat biztosítson. De a konstruktor még barátságosabb is lehet:
public class Circle {
public Circle(double r) { radius = r; }
}
Mostantól születésükkor meghatározott sugarú köröket hozhat létre:
szövegdoboz hozzáadása a Google Dokumentumokhoz
Circle c = new Circle(2);
System.out.println(c.area()); // 12.56636
Ez nagyon gyakori felhasználás a konstruktőröknél. Gyakran használja őket a változók paraméterértékekre inicializálására.
Konstruktor túlterhelés
Egy osztálykonfigurációban több konstruktort is megadhat:
public Circle() { radius = 1; }
public Circle(double r) { radius = r; }
Ez lehetőséget ad a hívó kódnak az objektumok létrehozására:
Circle c1 = new Circle(2);
Circle c2 = new Circle();
System.out.println(c1.area() + ', ' + c2.area()); // 12.56636, 3.14159
Egy kicsit bonyolultabb körrel felfedezhet érdekesebb konstruktorokat. Ez a verzió megőrzi pozícióját:
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; }
}
Most létrehozhat egy kört érvek nélkül, egyetlen sugárral vagy x és y koordinátákkal a sugár mellett. Ez ugyanaz a túlterhelés, amelyet a Java bármilyen módszerhez támogat.
Konstruktorlánc
Mi lenne, ha létrehoznál egy kört egy másik alapján? Ez lehetővé teszi számunkra, hogy könnyen másolhassuk a Köröket. Vegye figyelembe a következő blokkot:
public Circle(Circle c) {
this.x = c.x;
this.y = c.y;
this.radius = c.radius;
}
Ez működni fog, de szükségtelenül megismétel néhány kódot. Mivel a Circle osztálynak már van egy konstruktőre, amely kezeli az egyes tulajdonságokat, ezt hívhatja a ez kulcsszó:
public Circle(Circle c) {
this(c.x, c.y, c.radius);
}
Ez a konstruktor láncolásának egyik formája, az egyik konstruktor meghívása a másiktól. Kevesebb kódot használ, és segít a művelet központosításában, nem pedig a többszörözésben.
A szülőkonstruktor hívása
A konstruktorlánc másik formája akkor fordul elő, amikor egy konstruktor meghívja a szülőosztály konstruktorát. Ez lehet explicit vagy implicit. A szülőkonstruktor kifejezett hívásához használja a szuper kulcsszó:
super(x, y);
Képzelje el, hogy egy Alakosztály a Kör szülőjeként működik:
public class Shape {
double x, y;
public Shape(double _x, double _y) { x = _x; y = _y; }
}
Az összes alakzat közös pozicionálását kezeli, mivel ez a funkció közös mindannyian. Most a Kör osztály átruházhatja a pozíciókezelést a szülőjére:
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;
}
}
A szuperklasszikus építés nagyon fontos szempont öröklődés a Java -ban . A nyelv alapértelmezés szerint érvényesíti, ha nem hívja kifejezetten szuper a konstruktőreiben.
Hozzáférés módosítók a konstruktorokon
A konstruktorok hozzáférésmódosítót tartalmazhatnak az aláírásukban. Más módszerekhez hasonlóan ez határozza meg, hogy milyen típusú hívók férhetnek hozzá a konstruktorhoz:
public class Test {
private static Test uniqueInstance = new Test();
private Test() { }
public static Test getInstance() {
return uniqueInstance;
}
}
Ez egy bonyolultabb példa, ezért ügyeljen arra, hogy megértse:
- Az osztály nem absztrakt, így lehetséges belőle példányosítani.
- A konstruktor privát, így csak ez az osztály hozhat létre új példányt.
- Egy statikus tulajdonságon és metóduson keresztül az osztály egyetlen egyedi példányt tesz ki a hívóknak.
Objektumok létrehozásához használja a Java konstruktőreit
A konstruktorok létfontosságúak az objektum-orientált programozáshoz. Lehetővé teszik objektumok létrehozását, ami elengedhetetlen!
A Java -ban a konstruktorok más módszerekhez hasonlítanak, és nagyjából ugyanúgy működnek. Emlékeznie kell az alapértelmezett konstruktorokra, a túlterhelésre és a konstruktorláncokra vonatkozó speciális szabályokra. Ha a konstruktorok még nem ismerik Önt, érdemes elolvasni a Java alapfogalmait, amelyeket az induláskor meg kell tanulnia.
Részvény Részvény Csipog Email 10 alapvető Java fogalom, amelyeket meg kell tanulnia az induláskorAkár GUI-t ír, szerveroldali szoftvert fejleszt, vagy Android-ot használó mobilalkalmazást használ, a Java tanulása jól fog szolgálni. Íme néhány alapvető Java koncepció, amelyek segítenek az indulásban.
Olvassa tovább Kapcsolódó témák- Programozás
- Jáva
- Kódolási tippek
Bobby technológiai rajongó, aki két évtized nagy részében szoftverfejlesztőként dolgozott. Szenvedélyesen szereti a játékot, a Switch Player Magazin Vélemények szerkesztőjeként dolgozik, és elmerül az online közzététel és webfejlesztés minden területén.
mit frissítsek a számítógépes tesztenTovábbiak Bobby Jack -től
Iratkozzon fel hírlevelünkre
Csatlakozz hírlevelünkhöz, ahol technikai tippeket, értékeléseket, ingyenes e -könyveket és exkluzív ajánlatokat találsz!
Feliratkozáshoz kattintson ide