Trong trường hợp một lớp được khai báo bên trong một lớp khác thì ta gọi là lớp lồng nhau (Inner class). Chúng ta sử dụng inner class để nhóm các lớp và các interface một cách logic lại với nhau ở một nơi để giúp cho code dễ đọc và dẽ bảo trì hơn.
Một số ưu điểm của lớp lồng nhau bao gồm :
- Inner class biển diễn cho một kiểu đặc biệt của mối quan hệ đó là nó có thể truy cập tất cả các thành viên (các thành viên dữ liệu và các phương thức) của lớp ngoài bao gồm cả private.
- Inner class được sử dụng để giúp code dễ đọc hơn và dễ bảo trì bởi vì nó nhóm các lớp và các interface một cách logic vào trong một nơi.
- Code được tối ưu hóa: tiết kiệm code hơn. Cú pháp : classJava_Outer_class { // code classJava_Inner_class { // code } }
Có hai loại lớp lồng nhau :
- Non-static class: Một lớp non-static được tạo bên trong một lớp được gọi là lớp non-static lồng hay non-static class. Có ba kiểu non-static class:
o Member Inner Class: Một lớp được tạo ra bên trong một lớp và bên ngoài phương thức.
39 o Annomynous Inner Class: Một lớp được tạo ra để implements interface hoặc extends class. Tên của nó được quyết định bởi trình biên dịch java.
o Local Inner Class: Một lớp được tạo ra bên trong một phương thức. Nếu muốn gọi các phương thức của lớp được khai báo bên trong một phương thức, chúng ta phải tạo ra thể hiện của lớp này bên trong phương thức chứa nó.
- Static : Một lớp static được tạo bên trong một lớp được gọi là lớp static lồng hay static nested class. Nó không thể truy cập các thành viên và phương thức non-static. Nó có thể được truy cập bởi tên lớp bên ngoài.
40 o Nó có thể truy cập các thành viên dữ liệu tĩnh (static data members)
của lớp ngoài bao gồm cả private.
o Static nested class không thể truy cập thành viên dữ liệu hoặc phương thức non-static (instance).