Nested Interface trong Java



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 VietJack{  
  class VietJackTeam{
  }  
}  

Mọi người cho thể tham gia khóa học thứ 4 của vietjackteam vào cuối tháng 08/2017 do anh Nguyễn Thanh Tuyền, admin vietjack.com trực tiếp giảng dạy tại Hà Nội. Chi tiết nội dung khóa học tham khỏa link : Khóa học Java.Các bạn học CNTT, điện tử viễn thông, đa phương tiện, điện-điện tử, toán tin có thể theo học khóa này. Khóa học cũng đưa 200 câu hỏi phỏng vấn java trên https://www.javatpoint.com/corejava-interview-questions vào nội dung để giúp các bạn dễ dàng vượt qua kì phỏng vấn

Các bạn ở xa học không có điều kiện thời gian có thể tham dự khóa Java online để chủ động cho việc học tập. Thông tin khóa học tại Khóa học Java Online trên Udemy

Mọi người có thể xem demo nội dung khóa học tại địa chỉ Video demo khóa học Offline

Loạt bài hướng dẫn của chúng tôi dựa một phần trên nguồn tài liệu của: Tutorialspoint.com

Follow fanpage của team https://www.facebook.com/vietjackteam/ hoặc facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.



Demo một bài giảng trong khóa học online tại vietjackteam.