Các Phương Thức Khai Báo Lớp Trong Java

Trong ngôn ngữ lập trình Java, có nhiều cách khác nhau để định nghĩa và cấu trúc các lớp, mỗi phương pháp phục vụ cho các mục đích thiết kế và tổ chức mã riêng biệt. Việc hiểu rõ các kiểu khai báo lớp này giúp phát triển các ứng dụng Java linh hoạt và có cấu trúc tốt. Dưới đây là các phương pháp phổ biến để khai báo lớp trong Java.

1. Cấu Trúc Lớp Cơ Bản

Đây là cách thông thường nhất để định nghĩa một lớp độc lập, thường chứa phương thức main làm điểm bắt đầu thực thi chương trình.

package com.example.basic;

public class BasicApplication {
    public static void main(String[] args) {
        System.out.println("Đây là một ứng dụng Java đơn giản.");
    }
}

2. Lớp Cấp Cao (Top-Level Class)

Một lớp cấp cao là một lớp không lồng bên trong bất kỳ lớp nào khác. Chúng thường được định nghĩa trong các tệp tin .java riêng biệt và có thể được truy cập từ bất cứ đâu trong ứng dụng tùy thuộc vào phạm vi truy cập của chúng (public, package-private).

package com.example.entities;

public class ZooApp {
    public static void main(String[] args) {
        Cat myCat = new Cat();
        myCat.greet();
    }
}

// Lớp Cat là một lớp cấp cao, có thể nằm trong cùng một tệp hoặc tệp riêng biệt
class Cat {
    void greet() {
        System.out.println("Meo meo! Chào bạn.");
    }
}

3. Lớp Thành Viên Bên Trong (Member Inner Class)

Lớp thành viên bên trong là một lớp được định nghĩa bên trong một lớp khác (gọi là lớp ngoài - outer class) nhưng không phải là tĩnh. Các đối tượng của lớp bên trong này có thể truy cập các thành viên (bao gồm cả private) của đối tượng lớp ngoài mà nó thuộc về.

package com.example.structures;

public class VehicleAssembly {
    private String manufacturer = "Global Motors";

    // Lớp Engine là một lớp thành viên bên trong
    class Engine {
        void start() {
            // Có thể truy cập các thành viên của lớp ngoài
            System.out.println("Động cơ từ " + manufacturer + " đã khởi động.");
        }
    }

    public static void main(String[] args) {
        VehicleAssembly vehicle = new VehicleAssembly();
        // Để tạo đối tượng của lớp bên trong, cần có đối tượng của lớp ngoài
        VehicleAssembly.Engine carEngine = vehicle.new Engine();
        carEngine.start();
    }
}

4. Khởi Tạo Đối Tượng của Lớp Thành Viên Bên Trong Từ Bên Ngoài

Khi một lớp thành viên bên trong được định nghĩa trong một lớp ngoài, việc tạo đối tượng của lớp bên trong từ một lớp khác (hoặc phương thức tĩnh) yêu cầu một cú pháp đặc biệt để liên kết nó với một thể hiện của lớp ngoài.

package com.example.systems;

public class SystemController {
    public static void main(String[] args) {
        // Cần khởi tạo đối tượng DeviceManager trước
        DeviceManager manager = new DeviceManager();
        // Sau đó, sử dụng đối tượng manager để khởi tạo ControlPanel
        DeviceManager.ControlPanel panel = manager.new ControlPanel();
        panel.activate();
    }
}

class DeviceManager {
    private String deviceType = "Smart Home Hub";

    class ControlPanel {
        void activate() {
            System.out.println("Bảng điều khiển cho " + deviceType + " đã được kích hoạt.");
        }
    }
}

5. Lớp Thành Viên Bên Trong với Phạm Vi Private

Một lớp thành viên bên trong có thể được khai báo với phạm vi truy cập private. Điều này có nghĩa là nó chỉ có thể được truy cập và khởi tạo từ bên trong lớp ngoài. Đây là một cơ chế mạnh mẽ để ẩn đi các chi tiết triển khai nội bộ.

package com.example.security;

public class SecureContainerDemo {
    public static void main(String[] args) {
        SecureContainer box = new SecureContainer();
        box.triggerInternalAction();
    }
}

class SecureContainer {
    private int securityCode = 1234;

    // Lớp InternalMechanism là private, chỉ có thể được truy cập từ SecureContainer
    private class InternalMechanism {
        void performAction() {
            System.out.println("Cơ chế bảo mật nội bộ đang hoạt động với mã: " + securityCode);
        }
    }

    public void triggerInternalAction() {
        InternalMechanism mechanism = new InternalMechanism();
        mechanism.performAction();
    }
}

6. Lớp Cục Bộ (Local Inner Class)

Lớp cục bộ là một lớp được định nghĩa bên trong một phương thức, khối mã hoặc constructor. Phạm vi của nó bị giới hạn trong khối mà nó được định nghĩa. Nó thường được sử dụng khi cần một lớp chỉ dùng một lần trong một ngữ cảnh rất cụ thể.

package com.example.utilities;

public class TaskProcessor {
    public static void main(String[] args) {
        TaskProcessor processor = new TaskProcessor();
        processor.processTask("Khởi động hệ thống");
        processor.processTask("Kiểm tra dữ liệu");
    }

    public void processTask(String taskName) {
        // Lớp Logger là một lớp cục bộ, chỉ tồn tại trong phương thức processTask
        class Logger {
            void log() {
                System.out.println("Ghi log cho tác vụ: " + taskName); // Có thể truy cập biến final/effectively final từ bên ngoài
            }
        }
        Logger taskLogger = new Logger();
        taskLogger.log();
    }
}

7. Lớp Ẩn Danh (Anonymous Inner Class)

Lớp ẩn danh là một lớp không có tên. Nó được khai báo và khởi tạo đồng thời. Lớp ẩn danh thường được dùng để triển khai một interface hoặc mở rộng một lớp cơ sở tại chỗ, khi chỉ cần một thể hiện duy nhất của lớp đó.

package com.example.events;

public class EventSimulator {
    public static void main(String[] args) {
        // Khởi tạo một lớp ẩn danh để triển khai interface EventListener
        EventListener clickHandler = new EventListener() {
            @Override
            public void onEvent() {
                System.out.println("Sự kiện click chuột đã được xử lý!");
            }
        };
        clickHandler.onEvent();

        // Một lớp ẩn danh khác
        EventListener keyboardHandler = new EventListener() {
            @Override
            public void onEvent() {
                System.out.println("Sự kiện nhấn phím đã được ghi nhận!");
            }
        };
        keyboardHandler.onEvent();
    }
}

interface EventListener {
    void onEvent();
}

8. Lớp Thành Viên Tĩnh (Static Member Inner Class)

Lớp thành viên tĩnh là một lớp được định nghĩa bên trong một lớp khác và được khai báo với từ khóa static. Khác với lớp thành viên thông thường, lớp thành viên tĩnh không cần một thể hiện của lớp ngoài để được khởi tạo và không thể truy cập trực tiếp các thành viên non-static của lớp ngoài. Nó hoạt động giống như một lớp cấp cao độc lập, nhưng được lồng trong không gian tên của lớp ngoài.

package com.example.configs;

public class ConfigurationManager {
    public static void main(String[] args) {
        // Để khởi tạo lớp tĩnh bên trong không cần đối tượng của lớp ngoài
        AppConfig.Setting dbSetting = new AppConfig.Setting();
        dbSetting.display();

        AppConfig.Setting logSetting = new AppConfig.Setting();
        logSetting.display();
    }
}

class AppConfig {
    private static String appName = "MyApplication"; // Lớp tĩnh chỉ có thể truy cập thành viên tĩnh

    // Lớp Setting là một lớp thành viên tĩnh
    static class Setting {
        void display() {
            System.out.println("Cấu hình ứng dụng: " + appName + " - Đang tải.");
        }
    }
}

Thẻ: Java Lập trình Java Khai báo lớp Inner Class Local Class

Đăng vào ngày 16 tháng 9 lúc 22:35