CodeGym /Blog Java /Ngẫu nhiên /Chuỗi xây dựng trong Java

Chuỗi xây dựng trong Java

Xuất bản trong nhóm

Constructor Chaining là gì?

Hàm tạo trong Java là một phương thức cụ thể được sử dụng để tạo đối tượng của một lớp. Hàm tạo được gọi mỗi khi một đối tượng của lớp được tạo. Nó có thể được sử dụng để gán giá trị cho các thuộc tính của đối tượng tại thời điểm tạo. Có thể có nhiều hàm tạo trong một lớp Java với các danh sách tham số khác nhau. Chuỗi hàm tạo được sử dụng để gọi các triển khai khác nhau của các hàm tạo của cùng một lớp/lớp cha tại thời điểm tạo đối tượng.

Làm thế nào chuỗi xây dựng được thực hiện trong Java?

Có hai cách xâu chuỗi các hàm tạo dựa trên cách gọi hàm tạo. Chúng như sau.
  • sử dụng từ khóa this() – để gọi các hàm tạo của cùng một lớp
  • sử dụng từ khóa super() – để gọi hàm tạo của lớp cha
Điều này được giải thích trong các ví dụ sau.Constructor Chaining trong Java - 1

Constructor chaining ví dụ #1 – Constructor được xâu chuỗi bằng cách sử dụng từ khóa this()

Chúng tôi đã khai báo bốn hàm tạo cho DerivedClass. Một không có đối số và ba đối số còn lại với các đối số khác nhau. Bên trong mỗi hàm tạo, từ khóa this() được sử dụng để gọi hàm tạo tiếp theo của cùng một lớp.

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();
    }
}
Đầu ra của việc thực hiệnConstructor Chaining trong Java - 2

Constructor chaining ví dụ #2 – Constructor được xâu chuỗi bằng cách sử dụng từ khóa super()

Ở đây, lớp con gọi hàm tạo của lớp cha bằng cách sử dụng từ khóa super() . BaseClass có ba hàm tạo. Hàm tạo không có đối số gọi một trong ba hàm tạo ba đối số của BaseClass bằng cách sử dụng this() .

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);
    }
 
}
DerivedClass có hai hàm tạo, mỗi hàm gọi các hàm tạo khác nhau của siêu lớp bằng cách sử dụng super() .

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();
    }
}
Đầu ra của việc thực hiệnConstructor Chaining trong Java - 3

Gọi hàm tạo ẩn so với hàm tạo rõ ràng

Java có hai cách khác nhau để gọi hàm tạo: Cách gọi ẩn và cách gọi rõ ràng.
  • Gọi rõ ràng đề cập đến việc gọi các hàm tạo một cách rõ ràng trong mã bằng cách sử dụng this() hoặc super() .
  • Gọi hàm ẩn đề cập đến việc gọi hàm tạo không có đối số của siêu lớp khi không có lệnh gọi rõ ràng như vậy từ hàm tạo của lớp con. Nói cách khác, trình biên dịch thêm lệnh gọi super() làm dòng đầu tiên của bất kỳ hàm tạo nào của các lớp con nếu lập trình viên rõ ràng không gọi super() trong mã.

Tại sao chúng ta cần xây dựng chuỗi?

Có một số mục đích khác nhau để có một chuỗi hàm tạo trong Java, như được liệt kê bên dưới.
  • Đó là một cách để truy cập các thuộc tính của các hàm tạo khác hoặc thuộc tính của các lớp cha.
  • Trong khi gọi các hàm tạo khác, chỉ có một đối tượng đang được sử dụng, đó là thể hiện hiện tại của lớp. Quá trình khởi tạo xảy ra ở một nơi, nhưng chúng tôi có đặc quyền gọi các triển khai hàm tạo khác nhau thông qua một chuỗi. Điều này giúp rất nhiều trong việc quản lý bộ nhớ và bảo trì mã.

Phần kết luận

Trong hướng dẫn này, chúng ta đã thảo luận về chuỗi hàm tạo trong Java. Hàm tạo là các đoạn mã giống như phương thức được gọi trong khi tạo đối tượng. Một lớp Java có thể có bất kỳ số lượng hàm tạo nào với các danh sách tham số khác nhau. Constructor chaining là một cách thuận tiện để xử lý các lần khởi tạo khác nhau với một thể hiện của một lớp. Một số điểm quan trọng cần lưu ý từ hướng dẫn này được liệt kê dưới đây.
  • Nếu lập trình viên không thêm nó một cách rõ ràng vào mã, trình biên dịch sẽ thêm một hàm tạo không đối số công khai vào lớp Java. Đây được gọi là hàm tạo mặc định.
  • this()super() phải được viết ở dòng đầu tiên của hàm tạo.
  • this() được sử dụng để gọi các hàm tạo của cùng một lớp trong khi super() được sử dụng để gọi các hàm tạo của siêu lớp trực tiếp.
  • Nên có ít nhất một hàm tạo trong lớp không chứa từ khóa this() .
  • Nếu không được thêm vào một cách rõ ràng, trình biên dịch sẽ thêm lệnh gọi super() không có đối số cho mọi hàm tạo của lớp con. Điều này sẽ giúp khởi tạo các lớp một cách chính xác.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION