Hôm nay, mình vừa thi đề về java, có 1 câu về Anonymous Inner Class, làm bị sai toét tòe toe .
Sau khi tìm hiểu, mình xin trình bày lại, hi vọng giúp được một số bạn quan tâm đến Anonymous Inner Class, và cũng để mình note lại luôn (xem lại khi đã quên )
1. Định nghĩa về Anonymous Inner Class:
- Là một class không có tên, được định nghĩa trong 1 method của 1 class xác định. Nó chỉ được dùng 1 lần tại nơi mà nó đã được định nghĩa ra.
Nghe có vẻ hơi trừu tượng nhỉ:D Để mình làm ví dụ nhé :
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.Jframe; // Outer.java public class Abstract3 extends Jframe{ JButton btnHello = new JButton("aaaaaaaaaaa"); public Abstract3() { this.add (btnHello); this.btnHello.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { System.out.println("Hi! bogay"); } }); this.setSize(100,100); this.setVisible(true); } public static void main(String args[]) { Abstract3 abs3 = new Abstract3(); } }
Ở đây, khi tớ bắt sự kiện cho nút, tớ dùng interface ActionListener, nhưng tớ không implements trực tiếp, mà tớ gián tiếp sử dụng nó và override lại phương thức ActionPerformed tại method AddActionListener.
Sau khi bạn chạy xong, bạn vào thư mục chứa class này, bạn sẽ thấy nó sinh ra một class khác(chỉ sinh ra sau khi đã run), có tên là : Abstract3$1.java .
Đây chính là Anonymous Innner Class
Còn cách viết thông thường :
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.Jframe; // Outer.java public class Abstract3 extends Jframe implements ActionListener{ JButton btnHello = new JButton("aaaaaaaaaaa"); public void actionPerformed(ActionEvent arg0) { System.out.println("Hi ! bogay"); } public Abstract3() { this.add (btnHello); this.setSize(100,100); this.btnHello.addActionListener(this); this.setVisible(true); } public static void main(String args[]) { Abstract3 abs3 = new Abstract3(); } }
Trong cách này, thì tớ implements ActionListener theo cách thông thường, sau đó tớ overide lại phương thức ActionPerformed.
Tổng kết lại nhé :
1. Tác dụng : như nhau, không có sự khác biệt
2. Độ sướng : cách code anonymous ngắn gọn hơn, pro hơn
(i-php.net)