Trong Java, một Anonymous Class là một lớp được khai báo nội bộ, không có tên, có thể được sử dụng để định nghĩa và khởi tạo một lớp tại cùng một thời điểm. Một Anonymous Inner Class là một lớp không có tên và chỉ tạo ra các đối tượng.

Anonymous Class rất hữu ích trong việc xây dựng nhanh các implementation từ một interface hoặc abstract class trong tình huống mà việc tạo ra tên một lớp có thể trở nên dư thừa và thực sự là không cần thiết. Trong bài viết này, Stringee và các bạn sẽ cùng tìm hiểu về Anonymous Class nhé.

1. Giới thiệu về Anonymous Class trong Java

Anonymous Class là một loại class trong Java, trong đó các class này không được định nghĩa tên ở cú pháp, tên của chúng chỉ được sinh ra do quá trình biên dịch mã nguồn.

Hiểu đơn giản thì một lớp không có tên được hiểu là một Anonymous Inner Class trong Java. Nó có thể được sử dụng khi bạn phải thực hiện override một phương thức của lớp hoặc interface. Anonymous Class trong Java có thể được tạo ra bằng hai cách sau:

  • Sử dụng class (abstract hoặc concrete)
  • Sử dụng interface

2. Sử dụng Anonymous Class với abstract class

Chúng ta hãy cùng xem xét ví dụ dưới đây:

public class AnonymousClassAbstractMain {

    public static void main(String[] args) {
        Tester test = new Tester();
        test.testAbstract();
    }

}

abstract class Bird {
    abstract void fly();
}

class Tester {

    public void testAbstract() {
        final Bird bird = new Bird() {
            @Override
            void fly() {
                System.out.println("flying");
            }
        };

        bird.fly();

    }
    
}

Output:

flying

Ở đây, chúng ta có thể thấy một Anonymous Inner Class đã được khởi tạo ngay trong function testAbtract của lớp Tester.

final Bird bird = new Bird() {

            @Override
            void fly() {

                System.out.println("flying");

            }

        };

Vì lớp Bird là abstract và có phương thức fly là abstract nên chúng ta sẽ bắt buộc phải override lại phương thức này khi khởi tạo một class từ Bird. Ta có thể thấy, ở đây chúng ta không tạo ra một class kế thừa Bird, thay vào đó chúng ta đã tạo một đối tượng Bird ngay chính từ superclass của nó. Cú pháp khởi tạo sẽ tương tự cho cả cách khởi tạo với interface.

Abstract object = new Abstract() {
// override logic
};

Xem thêm bài viết:

- Tìm hiểu về design pattern factory trong Java

- HashMap trong Java

- Tìm hiểu về Deadlock trong Java

3. Sử dụng Anonymous Class với interface

public class AnonymousClassInterfaceMain {

    public static void main(String[] args) {
        Tester test = new Tester();
        test.testAbstract();
    }

}

interface Bird {
    void fly();
}

class Tester {

    public void testAbstract() {
        final Bird bird = new Bird() {
            @Override
            public void fly() {
                System.out.println("flying");
            }
        };

        bird.fly();

    }
}

Output:

flying

Đoạn code có sử dụng Anonymous Inner Class:

final Bird bird = new Bird() {

    @Override

    public void fly() {

        System.out.println("flying");

    }

};

4. Ưu và nhược điểm của Anonymous Class

Thay vì sử dụng extends class, Anonymous Class có ưu điểm riêng. Trong các trường hợp trên, lớp Anonymous được viết ngay trong method của class khác, sử dụng ngay lúc định nghĩa xong. Do vậy nên sử dụng Anonymous Class khi đối tượng chỉ được dùng một lần.

Thêm nữa Anonymous phù hợp trong trường hợp cần tạo đối tượng con, trong đó method viết lại từ lớp cha là ít và đơn giản. Lúc đó code sẽ đơn giản hơn.

Tuy nhiên, Anonymous luôn luôn được thừa kế từ 1 lớp cha hoặc implement từ một interface. Vì không định nghĩa class cho mình, nên Anonymous không có constructor để khởi tạo chính nó. Đây là nhược điểm của Anonymous. Mọi tham số truyền vào lúc khởi tạo 1 instance Anonymous luôn được truyền vào constructor của lớp cha để khởi tạo.

Kết

Trên đây là những kiến thức liên quan đến Anonymous Class trong Java. Hi vọng đọc xong bài viết này, các bạn sẽ hiểu được cách sử dụng Anonymous Class. Trong thời gian tới, Stringee sẽ còn mang đến cho các bạn nhiều kiến thức bổ ích khác, vì vậy hãy luôn theo dõi các bài viết đến từ chúng tôi nhé.


Stringee Communication APIs là giải pháp cung cấp các tính năng giao tiếp như gọi thoại, gọi video, tin nhắn chat, SMS hay tổng đài CSKH cho phép tích hợp trực tiếp vào ứng dụng/website của doanh nghiệp nhanh chóng. Nhờ đó giúp tiết kiệm đến 80% thời gian và chi phí cho doanh nghiệp bởi thông thường nếu tự phát triển các tính năng này có thể mất từ 1 - 3 năm.

Bộ API giao tiếp của Stringee hiện đang được tin dùng bởi các doanh nghiệp ở mọi quy mô, lĩnh vực ngành nghề như TPBank, VOVBacsi24, VNDirect, Shinhan Finance, Ahamove, Logivan, Homedy,  Adavigo, bTaskee…

Quý bạn đọc quan tâm xin mời đăng ký NHẬN TƯ VẤN TẠI ĐÂY: