Menu
CoddyTech

Phương thức getter và setter

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

Getter và setter là các phương thức giúp truy cập có kiểm soát vào các trường riêng tư. Getter lấy giá trị của một trường, còn setter thay đổi giá trị đó.

Quy tắc đặt tên tuân theo một mẫu chuẩn: tiền tố get hoặc set theo sau là tên trường, với chữ cái đầu tiên được viết hoa.

public class Product {
    private String name;
    private double price;
    
    // Phương thức lấy giá trị của name
    public String getName() {
        return name;
    }
    
    // Phương thức gán giá trị cho name
    public void setName(String name) {
        this.name = name;
    }
    
    // Phương thức lấy giá trị của price
    public double getPrice() {
        return price;
    }
    
    // Phương thức gán giá trị có kiểm tra tính hợp lệ
    public void setPrice(double price) {
        if (price >= 0) {
            this.price = price;
        }
    }
}

Sức mạnh thực sự của phương thức thiết lập là khả năng thêm logic kiểm tra tính hợp lệ. Trong ví dụ trên, setPrice chỉ chấp nhận giá trị không âm, giúp bảo vệ đối tượng khỏi dữ liệu không hợp lệ.

Với các trường boolean, hàm lấy giá trị thường dùng tiền tố is thay vì get:

private boolean active;

public boolean isActive() {
    return active;
}

Bạn cũng có thể tạo thuộc tính chỉ đọc bằng cách chỉ cung cấp getter, hoặc thuộc tính chỉ ghi bằng cách chỉ cung cấp setter. Cách này giúp bạn kiểm soát chi tiết cách code bên ngoài tương tác với dữ liệu của đối tượng.

challenge icon

Thử thách

Dễ

Hãy tạo một bộ chuyển đổi Temperature để minh họa sức mạnh của getter và setter cùng logic xác thực.

Bạn sẽ tạo hai tệp để sắp xếp code:

  • Temperature.java: Định nghĩa lớp Temperature để lưu giá trị nhiệt độ theo độ C. Lớp cần có:
    • Một trường celsius riêng tư (double)
    • Một trường valid riêng tư (boolean) để theo dõi xem nhiệt độ có khả thi về mặt vật lý hay không
    • Một getter getCelsius() trả về giá trị celsius
    • Một setter setCelsius() chỉ chấp nhận các giá trị bằng hoặc cao hơn độ không tuyệt đối (-273.15). Nếu giá trị hợp lệ, đặt valid thành true; nếu không, không thay đổi celsius và đặt valid thành false
    • Một getter isValid() cho trường boolean (hãy nhớ: getter boolean dùng tiền tố is)
    • Một getter getFahrenheit() chuyển đổi và trả về nhiệt độ theo độ Fahrenheit bằng công thức: (celsius * 9/5) + 32
  • Main.java: Tạo một đối tượng Temperature, đọc giá trị celsius làm đầu vào, dùng setter để đặt giá trị đó, sau đó in ra liệu nhiệt độ có hợp lệ hay không và giá trị tương đương theo độ Fahrenheit. Định dạng đầu ra thành hai dòng:
    • Valid: true hoặc Valid: false
    • Fahrenheit: X.X (hiển thị một chữ số thập phân)

Bạn sẽ nhận một đầu vào: giá trị double biểu thị nhiệt độ theo độ C.

Để định dạng đầu ra Fahrenheit với một chữ số thập phân, bạn có thể dùng String.format("%.1f", value).

Tự làm thử

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double celsiusInput = scanner.nextDouble();
        
        // TODO: Tạo một đối tượng (object) Temperature
        
        // TODO: Dùng phương thức setter để đặt giá trị celsius
        
        // TODO: In ra nhiệt độ có hợp lệ hay không (định dạng: "Valid: true" hoặc "Valid: false")
        
        // TODO: In ra nhiệt độ tương ứng theo Fahrenheit (định dạng: "Fahrenheit: X.X")
        // Gợi ý: Dùng String.format("%.1f", value) để hiển thị một chữ số thập phân
    }
}
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