CodeGym /Java blog /Véletlen /Constructor Chaining Java nyelven
John Squirrels
Szint
San Francisco

Constructor Chaining Java nyelven

Megjelent a csoportban

Mi az a konstruktor láncolás?

A Java konstruktor egy speciális metódus, amelyet egy osztály objektum létrehozására használnak. A konstruktor minden alkalommal meghívásra kerül, amikor az osztály egy objektumát létrehozzák. Használható értékek hozzárendelésére az objektum tulajdonságaihoz a létrehozáskor. Egy Java osztályban több konstruktor is lehet, különböző paraméterlistákkal. A konstruktorláncolás az azonos osztályba/szülőosztályba tartozó konstruktorok különböző implementációinak meghívására szolgál az objektum létrehozásának időpontjában.

Hogyan valósul meg a konstruktorláncolás a Java-ban?

A konstruktorok láncolásának két módja van a konstruktor meghívása alapján. Ezek a következők.
  • a(z) kulcsszó használatával – azonos osztályba tartozó konstruktorok meghívásához
  • super() kulcsszó használatával – a szülőosztály konstruktorainak meghívásához
Ezt a következő példák magyarázzák.Konstruktorláncolás Java nyelven – 1

Példa konstruktorok láncolására #1 – A konstruktorokat ezzel a() kulcsszóval láncolják

A DerivedClass négy konstruktőrét deklaráltuk. Az egyik érv nélkül, a másik három pedig különböző érvekkel. Az egyes konstruktorokon belül ez a() kulcsszó az azonos osztály következő konstruktorának meghívására szolgál.

package com.tutorialwriting.constchaining;
 
public class DerivedClass{
 
    String firstName;
    String country;
    int age;
 
    public DerivedClass() {
        // calling one argument constructor
        this("Maggie");
    }
 
    public DerivedClass(String firstName) {
        // calling two argument constructor
        this(firstName, 15);
    }
 
    public DerivedClass(String firstName, int age) {
        // calling three argument constructor
        this(firstName, age, "Australia");
    }
 
    public DerivedClass(String firstName, int age, String country) {
        this.firstName = firstName;
        this.age = age;
        this.country = country;
    }
 
    void displayValues() {
        System.out.println("First Name : " + firstName);
        System.out.println("Country : " + country);
        System.out.println("Age : " + age);
    }
 
    public static void main(String args[]) {
        DerivedClass object = new DerivedClass();
        object.displayValues();
    }
}
A végrehajtás kimeneteKonstruktorláncolás Java nyelven – 2

Konstruktorláncolási példa #2 – A konstruktorok a szuper() kulcsszó használatával vannak láncolva

Itt a gyermekosztály a szuper() kulcsszó használatával hívja meg a szülőosztály konstruktorait . A BaseClass-nek három konstruktora van. Az argumentumok nélküli konstruktor meghívja a BaseClass három argumentumból álló konstruktorának egyikét a this() használatával .

package com.tutorialwriting.constchaining;
 
public class BaseClass {
 
    public BaseClass() {
        //calling a three argument constructor of the same class
        this("Male", "English", "1989/11/10");
        System.out.println("I'm executed third!!!");
    }
 
    public BaseClass(String firstName, String surname, int idNo) {
        System.out.println("I'm executed first!");
        System.out.println("First name : " + firstName);
        System.out.println("Surname : " + surname);
        System.out.println("ID Number : " + idNo);
    }
 
    public BaseClass(String gender, String nationality, String birthDate) {
        System.out.println("I'm executed second!!");
        System.out.println("Gender : " + gender);
        System.out.println("Nationality : " + nationality);
        System.out.println("Birth Date : " + birthDate);
    }
 
}
A DerivedClass két konstruktorral rendelkezik, amelyek mindegyike a szuperosztály különböző konstruktorait hívja meg a super() segítségével .

package com.tutorialwriting.constchaining;
 
public class DerivedClass extends BaseClass {
 
    public DerivedClass() {
        //calling no argument constructor of the super class
        super();
    }
 
    public DerivedClass(String firstName, String surname, int idNo) {
        //calling three argument constructor of the super class
        super(firstName, surname, idNo);
    }
 
    public static void main(String args[]) {
        DerivedClass object2 = new DerivedClass("Paul", "Wilson", 123456);
        DerivedClass object1 = new DerivedClass();
    }
}
A végrehajtás kimeneteKonstruktorláncolás Java nyelven – 3

Implicit vs. explicit konstruktorhívás

A Java kétféle módon hívhatja meg a konstruktorokat: implicit hívás és explicit hívás.
  • Az explicit hívás a konstruktorok explicit meghívására utal a kódban a this() vagy super() használatával .
  • Az implicit hívás a szuperosztály argumentummentes konstruktorának implicit meghívására utal, ha nincs ilyen explicit hívás a gyermekosztály konstruktorától. Más szóval, a fordító hozzáadja a super() hívást a gyermekosztályok bármelyik konstruktorának első soraként, ha a programozó kifejezetten nem hívja meg a super()-t a kódban.

Miért van szükségünk a konstruktőri láncra?

Számos különböző célja van a konstruktorláncnak a Java nyelven, az alábbiak szerint.
  • Ez egy módja annak, hogy hozzáférjen más konstruktorok vagy a szülőosztályok tulajdonságaihoz.
  • Más konstruktorok hívásakor csak egy objektum kerül felhasználásra, amely az osztály aktuális példánya. Az inicializálás egy helyen történik, de megvan az a kiváltságunk, hogy egy láncon keresztül különböző konstruktor implementációkat hívhatunk meg. Ez nagyban segít a memóriakezelésben és a kód karbantartásában.

Következtetés

Ebben az oktatóanyagban a konstruktorláncolást tárgyaltuk Java nyelven. A konstruktorok metódusszerű kódszegmensek, amelyeket az objektumok létrehozásakor hívnak meg. Egy Java osztálynak tetszőleges számú konstruktora lehet különböző paraméterlistákkal. A konstruktorláncolás praktikus módja a különböző inicializálások kezelésének egy osztály egyetlen példányával. Az alábbiakban felsorolunk néhány fontos pontot, amelyeket meg kell jegyezni ebből az oktatóanyagból.
  • Ha a programozó nem adja hozzá kifejezetten a kódhoz, a fordító egy nyilvános argumentummentes konstruktort ad a Java osztályhoz. Ezt nevezzük alapértelmezett konstruktornak.
  • ezt() és super() a konstruktor első soraként kell írni.
  • A this() ugyanazon osztály konstruktorainak hívására szolgál, míg a super() a közvetlen szuperosztály konstruktorainak hívására szolgál.
  • Legalább egy olyan konstruktornak kell lennie az osztályon belül, amely nem tartalmazza ezt a() kulcsszót.
  • Ha nincs kifejezetten hozzáadva, a fordító minden gyermekosztály-konstruktorhoz hozzáad egy argumentum nélküli super() hívást. Ez segíti az osztályok helyes példányosítását.
Hozzászólások
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION