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.
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
celsiusriêng tư (double) - Một trường
validriê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ệ, đặtvalidthành true; nếu không, không thay đổi celsius và đặtvalidthà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
- Một trường
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: truehoặcValid: falseFahrenheit: 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
}
}
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
1Kiến thức cơ bản về lập trình hướng đối tượng
Tệp bên ngoàiGiới thiệu về lập trình hướng đối tượngLớp và đối tượngTừ khóa thisPhương thứcTrường (thuộc tính)Phương thức khởi tạoNạp chồng phương thức khởi tạoÔn tập: Máy tính đơn giản4Kế thừa
Kế thừa cơ bản (extends)Từ khóa superGhi đè phương thức (@Override)Chuỗi gọi hàm khởi tạoLớp ObjectKế thừa đơn và đa cấpVì sao không hỗ trợ kế thừa nhiều lớpÔn tập: Phân cấp lớp Employee7Phương thức đặc biệt và lớp Object
Phương thức toString()equals() và hashCode()Phương thức clone()compareTo() và ComparableGiao diện ComparatorÔn tập: sắp xếp tùy chỉnh2Bộ điều chỉnh quyền truy cập và đóng gói
Tổng quan về các mức truy cậpPhương thức getter và setterẨn thông tinTừ khóa finalÔn tập: Trình quản lý tài khoản ngân hàng5Tính đa hình
Kiến thức cơ bản về nạp chồng phương thứcGhi đè phương thức (thời gian chạy)Chuyển kiểu lên và chuyển kiểu xuốngToán tử instanceofLớp và phương thức trừu tượngÔn tập: máy tính hình học8Khái niệm OOP nâng cao
Kết hợp và kế thừaKết tập và hợp thànhLớp bên trong, lớp lồng nhau và lớp ẩn danhKiểu enum và phương thức enumBản ghi (Java 16+)Lớp sealed (Java 17+)3Thuộc tính lớp và thành viên tĩnh
Biến của instance và biến tĩnhPhương thức tĩnhKhối tĩnhHằng số (static final)Ôn tập: bộ đếm và tiện ích6Giao diện và lớp trừu tượng
Giới thiệu về giao diệnTriển khai giao diệnTriển khai nhiều giao diệnPhương thức mặc định và tĩnh trong giao diệnLớp trừu tượng và giao diệnGiao diện hàmÔn tập: hệ thống thanh toán9Kiểu tổng quát
Giới thiệu về kiểu tổng quátLớp tổng quátPhương thức tổng quátTham số kiểu có giới hạnKý tự đại diện (?, extends, super)Ôn tập: vùng chứa tổng quát12Mẫu thiết kế, phần 2
Mẫu CommandMẫu AdapterMẫu DecoratorMẫu Template MethodMẫu StateMẫu CompositeMẫu IteratorTự luyện tập: Trình biên dịch Java online