Nested Interface là gì?
Một Interface mà được khai báo bên trong một Interface khác thì được gọi là Nested Interface. Tương tự như Inner Class, thì bạn sử dụng Nested Interface để nhóm các Interface có mối quan hệ với nhau để làm tăng tính đọc và giúp dễ dàng duy trì chúng hơn. Nested Interface phải được tham chiếu bởi Outer Interface hoặc bởi các lớp. Bạn không thể truy cập chúng một cách trực tiếp.
Một số điểm cần ghi nhớ về Nested Interface
- Nested Interface phải là public nếu được khai báo bên trong Interface. Nhưng nếu nó được khai báo bên trong lớp thì bạn có thể sử dụng bất kỳ Modifier nào.
- Theo ngầm định thì Nested Interface được khai báo là static.
Cú pháp của Nested Interface được khai báo bên trong Interface
interface outer_interface { // phan khai bao code interface nested_interface { // phan khai bao code } }
Cú pháp của Nested Interface được khai báo bên trong lớp
class ten_lop{ // phan code interface nested_interface { // phan khai bao code } }
Ví dụ với trường hợp khai báo bên trong Interface
Ví dụ sau minh họa cách khai báo và truy cập Nested Interface.
interface Showable { void show(); interface Message { void printMessage(); } } class NestedInterfaceExample implements Showable.Message { public void printMessage() { System.out.println("Hello nested interface!!!"); } public static void main(String args[]) { Showable.Message message = new NestedInterfaceExample();// tai day la dang upcasting message.printMessage(); } }
Chạy chương trình Java trên sẽ cho kết quả:
Hello nested interface!!!
Như trong ví dụ trên, chúng ta có thể truy cập Message Interface bởi Outer Interface của nó là Showable bởi vì chúng ta không thể truy cập nó một cách trực tiếp. Việc này cũng giống như trường hợp chiếc điện thoại để trong phòng, chúng ta phải vào phòng thì mới lấy được nó. Trong Collection Framework, một ví dụ cho trường hợp Nested Interface là Entry. Entry là Interface con của Map, và để truy cập nó, chúng ta sử dụng cú pháp Map.Entry.
Ví dụ với trường hợp khai báo bên trong lớp
Ví dụ sau minh họa cách chúng ta định nghĩa một Interface bên trong một lớp và cách để truy cập nó.
class A { interface Message { void printMessage(); } } class NestedInterfaceExample implements A.Message { public void printMessage() { System.out.println("Hello nested interface!!!"); } public static void main(String args[]) { A.Message message = new NestedInterfaceExample();// tai day la dang upcasting message.printMessage(); } }
Chạy chương trình Java trên sẽ cho kết quả:
Hello nested interface!!!
Câu hỏi: Chúng ta có thể định nghĩa một lớp ở bên trong một Interface không?
Có, nếu bạn định nghĩa một lớp bên trong một Interface, thì Compiler sẽ tạo lớp đó là dạng Static Nested Class. Cú pháp như sau:
interface Hoclaptrinh{ class HoclaptrinhTeam{ } }