× Giới thiệu Lịch khai giảng Tin tức Sản phẩm học viên

Constructor Chaining trong Java - Tất tần tật về Constructor Chaining

08/10/2021 01:06

Trong bài viết trước, chúng ta đã thảo luận về Constructor và Copy Constructor trong Java là gì. Trong bài này, chúng ta sẽ thảo luận về Constructor Chaining trong Java. Constructor Chaining là quá trình gọi một phương thức khởi tạo từ một phương thức khởi tạo khác. Rất khó để hiểu cách gọi một hàm tạo từ một hàm tạo khác. Chúng ta có thể triển khai Constructor Chaining trong Java bằng cách sử dụng từ khóa này hoặc từ khóa super . Cùng tìm hiểu về Constructor Chaining trong Java qua bài viết này bạn nhé!

Constructor Chaining trong Java là gì?

Constructor Chaining là quá trình gọi một hàm tạo của một lớp từ một hàm tạo khác của cùng một lớp hoặc một lớp khác bằng cách sử dụng đối tượng hiện tại của lớp. 

Constructor Chaining trong Java

Các cách triển khai Java Constructor Chaining

Có hai cách mà chúng ta có thể sử dụng chuỗi khởi tạo trong Java. Những cách này phụ thuộc vào việc chúng ta đang sử dụng nó trong cùng một lớp hay khác lớp.

  • Sử dụng từ khóa this
  • Sử dụng từ khóa super

a. Constructor Chaining trong Java với từ khóa this ()

package com.techvidvan.constructorchaining;

class Example {

  //default constructor

  Example() {

    System.out.println("Inside Default");

  }

  //Parameterized constructor

  Example(int n) {

    //calling default constructor

    this();

    System.out.println("Inside Parameterized");

  }

}

public class ThisExample {

  public static void main(String arg[]) {

    //calling the parameterized constructor

    Example obj = new Example(15);

  }

}

Nếu chúng ta muốn gọi hàm tạo từ cùng một lớp, thì chúng ta sử dụng từ khóa này . Giả sử chúng ta muốn gọi cả phương thức khởi tạo mặc định và tham số hóa trong quá trình khởi tạo lớp, sau đó chúng ta truyền tham số khi tạo đối tượng và trong phương thức khởi tạo tham số đó, chúng ta sẽ viết câu lệnh this để phương thức khởi tạo mặc định sẽ được gọi. Hãy xem một ví dụ để hiểu điều này:

 

 

Output

Inside Default

Inside Parameterized

>>> Đọc thêm: StringBuffer trong Java - Tìm hiểu Java StringBuffer cùng ví dụ cụ thể

b, Constructor Chaining trong Java với từ khóa super()

Nếu chúng ta muốn gọi hàm tạo từ lớp cha, thì chúng ta sử dụng từ khóa super. Dp đó khi có nhiều hơn một lớp có quan hệ kế thừa, chúng ta cần sử dụng từ khóa super trong lớp con để gọi hàm tạo của lớp cha. Chúng ta chỉ có thể gọi một hàm tạo của lớp hiện tại với this(). Ví dụ:

package com.techvidvan.constructorchaining;

class Parent {

  Parent() {

    System.out.println("Parent class default constructor");

  }

  Parent(int x) {

    System.out.println("Parent class one-argument constructor");

  }

}

class Child extends Parent {

  Child() {

    //by default the default constructor of Parent class is invoked

    System.out.println("Child class default constructor");

  }

  Child(int x) {

    super(); // default constructor of Parent class is invoked

    System.out.println("Child class one-argument constructor");

  }

}

public class SuperExample {

  public static void main(String arg[]) {

    Child obj1 = new Child();

    Child obj2 = new Child(10);

  }

}

 

Output:

Parent class default constructor

Child class default constructor

Parent class default constructor

Child class one-argument constructor

>>> Đọc thêm: Đối số dòng lệnh trong Java - Tìm hiểu về đối số dòng lệnh

Nhu cầu sử dụng Constructor Chaining trong Java

Constructor Chaining trong Java được sử dụng khi chúng ta muốn truyền tham số qua các hàm tạo khác nhau bằng cách sử dụng một đối tượng. Sử dụng chuỗi khởi tạo, chúng ta có thể thực hiện nhiều tác vụ thông qua một hàm tạo duy nhất. Constructor chaining cho phép chúng ta tạo một constructor riêng biệt cho từng tác vụ và tạo liên kết hoặc chuỗi giữa chúng để tăng khả năng đọc của mã.

Giả sử, nếu chúng ta không thực hiện chuỗi giữa các hàm tạo và chúng yêu cầu một tham số cụ thể, thì chúng ta sẽ cần khởi tạo tham số đó hai lần trong mỗi hàm tạo. Bất cứ khi nào bạn muốn thực hiện các thay đổi trong tham số, bạn cần phải thực hiện các thay đổi bên trong mỗi hàm tạo.

Hoạt động của chuỗi Constructor trong Java

Chuỗi Constructor xảy ra trong quá trình Kế thừa trong Java. Khi chúng ta đang xử lý phương thức khởi tạo của lớp cha, thì phương thức khởi tạo của lớp con trước tiên sẽ gọi phương thức khởi tạo của lớp cha. Điều này đảm bảo rằng lớp con được tạo với sự khởi tạo của các thành viên trong lớp cha. Chuỗi Constructor tiếp tục cho đến khi nó đạt đến Constructor với chuỗi cuối cùng. Tuy nhiên, chúng ta không thể gọi nhiều hơn một Constructor từ một hàm tạo duy nhất. Sơ đồ dưới đây minh hoạt hoạt động của chuỗi phương thức Constructor. 

Quy tắc chuỗi Constructor trong Java

Nếu bạn muốn sử dụng Constructor Chaining trong Java, bạn phải tuân theo các quy tắc dưới đây:

  • Câu lệnh this () và super() phải luôn là câu lệnh đầu tiên bên trong hàm tạo
  • Ít nhất một hàm tạo cần hiện diện trong lớp không có từ khóa this trong đó
  • Chúng ta có thể thực thi Constructor chaining theo bất kỳ trật tự nào.

>>> Tham khảo: Khóa học lập trình Java

Ví dụ về Constructor Chaining

package com.techvidvan.constructorchaining;

class Student {

  private String name;

  private int age;




  public Student() {

    this("Shreya"); //calling one-argument constructor of same class

    System.out.println("Inside no-argument constructor of the Base class");

  }




  public Student(String name) {

    this.name = name;

    System.out.println("Inside the one-argument constructor of the Base class");

  }




  public Student(String name, int age) {

    this.name = name;

    this.age = age;

    System.out.println("Inside the two-argument constructor of the Base class");

  }

}

class MedicalStudent extends Student {

  public MedicalStudent() {

    System.out.println("Inside no argument constructor of the Derived class");

  }




  public MedicalStudent(String name) {

    super(name); //calling one argument constructor of the base class

    System.out.println("Inside the one-argument constructor from Derived class");

  }




  public MedicalStudent(String name, int age) {

    super(name, age);

    System.out.println("Inside the two-argument constructor of the Derived class");

  }

}

public class Test {

  public static void main(String args[]) {

    // Testing constructor chaining in Java

    MedicalStudent sub = new MedicalStudent("Priya");

    //caliing one-argument constructor

    MedicalStudent sub1 = new MedicalStudent("Deepak", 23);

    //caliing two-argument constructor

  }

}

Output:

Inside the one-argument constructor of the Base class

Inside the one-argument constructor from Derived class

Inside the two-argument constructor of the Base class

Inside the two-argument constructor of the Derived class

Kết luận: 

Constructor cũng tương tự như các phương thức khác trong Java nhưng chung không có kiểu trở về nào và chúng được gọi khi đối tượng của lớp được tạo. Việc gọi một hàm tạo từ một hàm tạo khác trong cùng một lớp hoặc khác lớp được gọi là chuỗi khởi tạo trong Java. Nếu chúng ta phải gọi một hàm tạo trong cùng một lớp, chúng ta sử dụng từ khóa this, và nếu chúng ta muốn gọi nó từ lớp khác, chúng ta sử dụng từ khóa super. Trên đây là toàn bộ các thông tin về Constructor Chaining trong Java, hy vọng bạn hiểu rõ hơn về  Constructor Chaining và có thể dễ dàng làm việc với nó trong các dự án của mình. Tìm hiểu thêm về Java và các ngôn ngữ lập trình khác qua các khóa học lập trình tại Viện công nghệ thông tin T3H.