1. Sử dụng static class trong Java
Trong Java, chúng ta có thể tạo một lớp bên trong một lớp khác. Lớp đó gọi là nested class. Có 2 loại nested class là: inner class và static class. Chúng ta đã từng tìm hiểu về static class ở bài Sử dụng nested class và inner class trong Java. Các bạn có thể đọc lại nhé.
Các bạn lưu ý là chỉ một lớp nằm trong một lớp khác thì mới có thể khai báo với static. Nếu một lớp bình thường mà khai báo với static thì sẽ gây ra lỗi.
static class Animal {
public static void displayInfo() {
System.out.println("I am an animal");
}
}
class Main {
public static void main(String[] args) {
Animal.displayInfo();
}
}
Kết quả
java.lang.RuntimeException: Uncompilable source code - modifier static not allowed here
2. Anonymous class trong Java là gì?
Trong Java, một lớp có thể bao gồm một lớp khác thì đó là nested class. Một nested class không có tên thì được gọi là anonymous class. Ví dụ:
class outerClass {
//định nghĩa một anonymous class
object1 = new Type(parameterList) {
//thân lớp của anonymous class
};
}
Trong đó, Type có thể là:
- Một lớp cha mà anonymous class sẽ kế thừa với từ khóa extends
- Một interface mà anonymous class sẽ kế thừa với từ khóa implements
Lưu ý: Sau khi định nghĩa anonymous class thì có dấu chấm phẩy “;”. Bởi vì khi định nghĩa một anonymous class và gán nó cho một biến đối tượng thì giống như một câu lệnh.
Ví dụ:
class LopA {
public void xuat() {
System.out.println("Day la lop A.");
}
}
class AnonymousDemo{
public void createClass() {
//tạo một anonymous class extends LopA
LopA p1 = new LopA() {
@Override
public void xuat() {
System.out.println("Day la anonymous class.");
}
};
p1.xuat();
}
}
class Main {
public static void main(String[] args) {
AnonymousDemo an = new AnonymousDemo();
an.createClass();
}
}
Kết quả
Day la anonymous class.
Trong ví dụ trên, lớp LopA được định nghĩa với hàm xuat()
. Bên trong lớp AnonymousDemo có một anonymous class kế thừa LopA và được gán cho đối tượng p1. Lớp anonymous khi kế thừa LopA thì đã overriding hàm xuat()
mà nó thừa kế được từ LopA.
Sự tiện lợi khi sử dụng anonymous class trong Java
Trong anonymous class, các đối tượng được tạo ra bất kỳ khi nào cần đến và chỉ thực hiện một nhiệm vụ nhất định nào đó là xong. Không cần định nghĩa một lớp riêng để chỉ tạo 1 đối tượng của lớp đó. Điều này cũng giúp code ngắn gọn. Ví dụ:
Object = new Example() {
public void display() {
System.out.println("Anonymous class overrides the method display().");
}
};
Trong ví dụ trên, một đối tượng của lớp anonymous được tạo ra khi chúng ta cần ghi đè phương thức display()
.