Menu
CoddyTech

Nạp chồng phương thức khởi tạo

Thuộc phần Lập trình hướng đối tượng trong hành trình Java của Coddy. Bài học 8 trên 87.

Nạp chồng hàm khởi tạo (constructor) nghĩa là có nhiều hàm khởi tạo với các danh sách tham số khác nhau. Dùng this() để gọi một hàm khởi tạo từ một hàm khởi tạo khác.

Nhiều hàm khởi tạo

public class Book {
    private String title;
    private String author;
    private int pages;
    
    public Book(String title, String author, int pages) {
        this.title = title;
        this.author = author;
        this.pages = pages;
    }
    
    public Book(String title, String author) {
        this.title = title;
        this.author = author;
        this.pages = 0;
    }
}

Chuỗi gọi hàm khởi tạo với this()

public class Book {
    private String title;
    private String author;
    private int pages;
    
    public Book(String title, String author, int pages) {
        this.title = title;
        this.author = author;
        this.pages = pages;
    }
    
    public Book(String title, String author) {
        this(title, author, 0);  // Gọi hàm khởi tạo có 3 tham số
    }
    
    public Book() {
        this("Unknown", "Unknown");  // Gọi hàm khởi tạo có 2 tham số
    }
}

Cách sử dụng

Book b1 = new Book("1984", "Orwell", 328);
Book b2 = new Book("Dune", "Herbert");
Book b3 = new Book();

this() phải là câu lệnh đầu tiên trong hàm khởi tạo. Việc gọi nối tiếp giúp tránh lặp lại logic gán giá trị giữa các hàm khởi tạo.

challenge icon

Thử thách

Trung bình

Tạo ba hàm khởi tạo nạp chồng cho lớp Product bằng cách nối chuỗi hàm khởi tạo:

  • Hàm khởi tạo có 3 tham số: tên, giá, số lượng trong kho
  • Hàm khởi tạo có 2 tham số: tên, giá (số lượng trong kho mặc định là 0)
  • Hàm khởi tạo mặc định: không có tham số (name = "Unknown", price = 0, stock = 0)

Dùng this() để nối các hàm khởi tạo và tránh lặp lại code.

Tự làm thử

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        double price = Double.parseDouble(scanner.nextLine());
        int stock = Integer.parseInt(scanner.nextLine());
        
        Product product1 = new Product(name, price, stock);
        Product product2 = new Product("Keyboard", 79.99);
        Product product3 = new Product();
        
        System.out.println("Product 1: " + product1.getName() + " - $" + product1.getPrice() + " (Stock: " + product1.getStock() + ")");
        System.out.println("Product 2: " + product2.getName() + " - $" + product2.getPrice() + " (Stock: " + product2.getStock() + ")");
        System.out.println("Product 3: " + product3.getName() + " - $" + product3.getPrice() + " (Stock: " + product3.getStock() + ")");
    }
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch Java online