Bài 10: Anonymous Inner Class trong Java
I. Định nghĩa và ví dụ cụ thể
Định nghĩa Anonymous Inner Class:
Anonymous Inner Class là một lớp nội bộ không có tên được khai báo và khởi tạo cùng lúc trong một biểu thức duy nhất. Anonymous Inner Class thường được sử dụng để tạo các lớp con tức thời của các lớp hoặc triển khai các interface chỉ sử dụng một lần.
Ví dụ cụ thể:
interface Greeting {
void greet();
}
public class AnonymousInnerClassExample {
public static void main(String[] args) {
// Sử dụng Anonymous Inner Class để triển khai interface Greeting
Greeting morningGreeting = new Greeting() {
@Override
public void greet() {
System.out.println("Good morning!");
}
};
// Sử dụng Anonymous Inner Class để triển khai interface Greeting
Greeting eveningGreeting = new Greeting() {
@Override
public void greet() {
System.out.println("Good evening!");
}
};
morningGreeting.greet(); // In ra: Good morning!
eveningGreeting.greet(); // In ra: Good evening!
}
}
Giải thích:
Trong ví dụ trên, chúng ta đã sử dụng Anonymous Inner Class để tạo hai đối tượng morningGreeting và eveningGreeting triển khai interface Greeting. Mỗi đối tượng có triển khai riêng cho phương thức greet.
II. Ứng dụng trong thực tế
Các trường hợp sử dụng Anonymous Inner Class:
- Event Handling:
Anonymous Inner Class thường được sử dụng để xử lý các sự kiện trong GUI (Giao diện người dùng đồ họa). Ví dụ, trong ứng dụng Swing, bạn có thể sử dụng Anonymous Inner Class để xử lý các sự kiện nhấp chuột:
import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ButtonClickExample {
public static void main(String[] args) {
JFrame frame = new JFrame("Button Click Example");
JButton button = new JButton("Click Me");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Button clicked!");
}
});
frame.add(button);
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
Giải thích:
Trong ví dụ trên, chúng ta sử dụng Anonymous Inner Class để tạo một đối tượng ActionListener và gán nó cho nút button. Khi nút được nhấp, phương thức actionPerformed được gọi và thông báo "Button clicked!" được in ra.
- Runnable Interface:
Anonymous Inner Class cũng thường được sử dụng để tạo các luồng (threads) trong Java bằng cách triển khai interface Runnable:
public class RunnableExample {
public static void main(String[] args) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Thread is running");
}
});
thread.start(); // In ra: Thread is running
}
}
Giải thích:
Trong ví dụ này, chúng ta sử dụng Anonymous Inner Class để triển khai interface Runnable và tạo một đối tượng Thread. Khi luồng được bắt đầu, phương thức run được gọi và thông báo "Thread is running" được in ra.
III. Bài tập thực hành
Bài tập: Tạo một hệ thống quản lý sự kiện sử dụng Anonymous Inner Class.
Yêu cầu:
Tạo một interface
Eventvới phương thứctrigger().Tạo một lớp
EventManagervới phương thứcaddEventHandler(Event event).Sử dụng Anonymous Inner Class để thêm các sự kiện vào
EventManager.Viết chương trình chính để tạo và kích hoạt các sự kiện.
Mã nguồn mẫu:
interface Event {
void trigger();
}
class EventManager {
private List<Event> events = new ArrayList<>();
public void addEventHandler(Event event) {
events.add(event);
}
public void triggerAllEvents() {
for (Event event : events) {
event.trigger();
}
}
}
public class EventSystemExample {
public static void main(String[] args) {
EventManager eventManager = new EventManager();
// Sử dụng Anonymous Inner Class để tạo sự kiện chào buổi sáng
eventManager.addEventHandler(new Event() {
@Override
public void trigger() {
System.out.println("Good morning event triggered!");
}
});
// Sử dụng Anonymous Inner Class để tạo sự kiện chào buổi tối
eventManager.addEventHandler(new Event() {
@Override
public void trigger() {
System.out.println("Good evening event triggered!");
}
});
// Kích hoạt tất cả các sự kiện
eventManager.triggerAllEvents();
}
}
Giải thích:
Trong bài tập này, chúng ta tạo một hệ thống quản lý sự kiện. Chúng ta sử dụng Anonymous Inner Class để thêm các sự kiện vào EventManager. Khi phương thức triggerAllEvents được gọi, tất cả các sự kiện sẽ được kích hoạt và thông báo tương ứng được in ra.
Tổng kết
Bài học này cung cấp một cái nhìn chi tiết về Anonymous Inner Class trong Java, bao gồm định nghĩa, ứng dụng thực tế và các ví dụ minh họa cụ thể. Việc nắm vững khái niệm này sẽ giúp bạn viết mã ngắn gọn, linh hoạt và dễ bảo trì hơn, đặc biệt trong các trường hợp cần triển khai các lớp hoặc interface một cách tức thời và chỉ sử dụng một lần.