Menu
CoddyTech

Phương thức toString()

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 41 trên 87.

Mọi lớp (class) trong Java đều kế thừa từ lớp Object, lớp này cung cấp một số phương thức hữu ích. Một trong những phương thức thường được ghi đè nhất là toString(), phương thức này trả về biểu diễn dạng chuỗi của một đối tượng.

Theo mặc định, toString() trả về tên lớp theo sau là mã băm của đối tượng, thông tin này không hữu ích lắm:

public class Person {
    private String name;
    private int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

Person p = new Person("Alice", 25);
System.out.println(p);  // Person@15db9742

Bằng cách ghi đè toString(), bạn có thể cung cấp đầu ra có ý nghĩa để mô tả trạng thái của đối tượng:

public class Person {
    private String name;
    private int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    @Override
    public String toString() {
        return "Person[name=" + name + ", age=" + age + "]";
    }
}

Person p = new Person("Alice", 25);
System.out.println(p);  // Person[name=Alice, age=25]

Phương thức toString() được tự động gọi khi bạn in ra một đối tượng hoặc nối đối tượng đó với một chuỗi. Nhờ vậy, việc gỡ lỗi trở nên dễ dàng hơn nhiều vì bạn có thể nhanh chóng xem nội dung của đối tượng mà không cần viết thêm code.

challenge icon

Thử thách

Dễ

Hãy xây dựng một hệ thống quản lý hàng tồn kho hiển thị thông tin có ý nghĩa về các mặt hàng bằng cách triển khai toString() tùy chỉnh. Bạn sẽ tạo lớp Product ghi đè phương thức toString() mặc định để cung cấp cách biểu diễn rõ ràng, dễ đọc cho từng sản phẩm.

Bạn sẽ sắp xếp code trong hai tệp:

  • Product.java: Tạo một lớp đại diện cho một mặt hàng trong kho. Mỗi Product có ba trường riêng tư: name (String), price (double) và quantity (int). Thêm hàm khởi tạo để khởi tạo cả ba trường. Ghi đè phương thức toString() để trả về một chuỗi được định dạng chính xác như sau: Product[name=X, price=Y, quantity=Z], trong đó X, Y và Z là giá trị thực tế của các trường. Giá hiển thị dưới dạng số thông thường, không cần định dạng đặc biệt.
  • Main.java: Tạo và hiển thị sản phẩm để đưa lớp Product vào hoạt động. Bạn sẽ nhận ba đầu vào: tên sản phẩm (String), giá (double) và số lượng (int). Tạo một Product với các giá trị này, sau đó in trực tiếp đối tượng sản phẩm bằng System.out.println(). Nhờ phương thức toString() bạn đã ghi đè, chương trình sẽ tự động hiển thị thông tin sản phẩm đã định dạng thay vì kết quả mặc định khó hiểu!

Bạn sẽ nhận ba đầu vào: tên sản phẩm (String), giá (double) và số lượng (int).

Hãy chú ý cách in trực tiếp đối tượng sẽ tự động gọi phương thức toString(). Điều này giúp việc gỡ lỗi và ghi nhật ký trong các ứng dụng thực tế dễ dàng hơn rất nhiều!

Tự làm thử

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Đọc các giá trị đầu vào
        String name = scanner.nextLine();
        double price = scanner.nextDouble();
        int quantity = scanner.nextInt();
        
        // TODO: Tạo đối tượng Product bằng các giá trị đầu vào
        
        // TODO: In trực tiếp đối tượng Product
        // (Thao tác này sẽ tự động gọi phương thức toString()!)
    }
}
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