Bài 7: Final Class, Final Method và Final Variable trong Java
I. Định nghĩa và lợi ích của Final Class
Định nghĩa Final Class:
Lớp được khai báo với từ khóa final được gọi là Final Class. Lớp này không thể bị kế thừa bởi bất kỳ lớp nào khác. Điều này đảm bảo rằng các đặc tính của lớp không bị thay đổi bởi các lớp con.
Lợi ích của Final Class:
Bảo mật: Ngăn chặn việc kế thừa và ghi đè các phương thức của lớp, đảm bảo tính toàn vẹn của lớp.
Hiệu suất: Các phương thức trong lớp
finalcó thể được tối ưu hóa hơn vì Java biết rằng chúng không thể bị ghi đè.Thiết kế API: Đảm bảo rằng người dùng của API không thể thay đổi hành vi cơ bản của các lớp.
Ví dụ sử dụng Final Class:
public final class ImmutableClass {
private final int id;
private final String name;
public ImmutableClass(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
}
II. Final Method và lợi ích của chúng
Định nghĩa Final Method:
Phương thức được khai báo với từ khóa final không thể bị ghi đè bởi các lớp con. Điều này giúp bảo vệ các phương thức quan trọng khỏi việc bị thay đổi.
Lợi ích của Final Method:
Bảo mật: Đảm bảo rằng phương thức quan trọng không bị thay đổi hành vi bởi các lớp con.
Hiệu suất: Giúp trình biên dịch tối ưu hóa mã vì biết rằng phương thức sẽ không bị ghi đè.
Ví dụ sử dụng Final Method:
class Animal {
final void sound() {
System.out.println("This animal makes a sound.");
}
}
class Dog extends Animal {
// Phương thức này sẽ gây lỗi biên dịch vì không thể ghi đè phương thức final
// @Override
// void sound() {
// System.out.println("The dog barks.");
// }
}
III. Final Variable và lợi ích của chúng
Định nghĩa Final Variable:
Biến được khai báo với từ khóa final là một hằng số và không thể thay đổi giá trị sau khi đã được khởi tạo.
Lợi ích của Final Variable:
Bất biến: Đảm bảo giá trị của biến không thay đổi sau khi khởi tạo, giúp mã nguồn ổn định và dễ bảo trì hơn.
Bảo mật: Ngăn chặn sự thay đổi không mong muốn của các giá trị quan trọng trong chương trình.
Ví dụ sử dụng Final Variable:
public class FinalVariableExample {
private final int id;
private final String name;
public FinalVariableExample(int id, String name) {
this.id = id;
this.name = name;
}
public void display() {
System.out.println("ID: " + id);
System.out.println("Name: " + name);
}
public static void main(String[] args) {
FinalVariableExample example = new FinalVariableExample(1, "Alice");
example.display();
// Không thể thay đổi giá trị của biến final
// example.id = 2; // Gây lỗi biên dịch
}
}
IV. Bài tập thực hành
Bài tập: Tạo một hệ thống quản lý tài khoản ngân hàng sử dụng final class, final method và final variable.
Yêu cầu:
Tạo một lớp
BankAccountvới các thuộc tínhaccountNumbervàbalance.Định nghĩa các phương thức để nạp tiền, rút tiền và hiển thị thông tin tài khoản.
Sử dụng
finalcho các phương thức không muốn bị ghi đè và các biến không muốn bị thay đổi.Viết chương trình chính để tạo các đối tượng và gọi các phương thức.
Mã nguồn mẫu:
public final class BankAccount {
private final String accountNumber;
private double balance;
public BankAccount(String accountNumber, double balance) {
this.accountNumber = accountNumber;
this.balance = balance;
}
public final void deposit(double amount) {
if (amount > 0) {
balance += amount;
System.out.println("Deposited: " + amount);
} else {
System.out.println("Deposit amount must be positive");
}
}
public final void withdraw(double amount) {
if (amount > 0 && amount <= balance) {
balance -= amount;
System.out.println("Withdrew: " + amount);
} else {
System.out.println("Invalid withdrawal amount");
}
}
public void displayAccountInfo() {
System.out.println("Account Number: " + accountNumber);
System.out.println("Balance: " + balance);
}
public static void main(String[] args) {
BankAccount account = new BankAccount("123456789", 1000.0);
account.displayAccountInfo();
account.deposit(500.0);
account.withdraw(300.0);
account.displayAccountInfo();
// Không thể kế thừa lớp final
// class SavingsAccount extends BankAccount {
// ...
// }
}
}
Tổng kết
Bài học này cung cấp một cái nhìn chi tiết về final class, final method và final variable trong Java, bao gồm định nghĩa, lợi ích và cách sử dụng. Việc nắm vững các khái niệm này sẽ giúp bạn bảo vệ các phần quan trọng của mã nguồn, cải thiện tính bảo mật và hiệu suất của các ứng dụng phần mềm.