我們可以將接口聲明為類或另一個接口的成員。這樣的接口稱為成員接口或嵌套接口。類中的接口當在任何其他類之外聲明時,接口(或類)隻能具有公共和默認訪問說明符。參考Java 中類或接口的訪問修飾符文章了解詳細信息。在類中聲明的接口可以是默認的、公共的、受保護的而不是私有的。在實現接口時,我們將接口稱為c_name.i_name其中c_name是它嵌套的類的名稱,並且i_name是接口本身的名稱。
嵌套接口的語法
interface first{ interface second{ ... } }
還有另一個嵌套接口,它嵌套在類中,其語法如下:
class abc{ interface _interface_name{ ... } }
Java Nested-Interface 的示例
以下是演示在不同情況下使用嵌套接口的示例。
示例 1
讓我們看一下下麵的代碼:
Java
// Java program to demonstrate working of
// interface inside a class.
import java.util.*;
class Test {
interface Yes {
void show();
}
}
class Testing implements Test.Yes {
public void show()
{
System.out.println("show method of interface");
}
}
class A {
public static void main(String[] args)
{
Test.Yes obj;
Testing t = new Testing();
obj = t;
obj.show();
}
}
show method of interface
上例中的訪問說明符是默認的。我們也可以分配公共、受保護或私有。
示例 2
下麵是受保護的示例。在這個特定的示例中,如果我們將訪問說明符更改為 private,則會收到編譯器錯誤,因為派生類嘗試訪問它。
Java
// Java program to demonstrate protected
// specifier for nested interface.
import java.util.*;
class Test {
protected interface Yes {
void show();
}
}
class Testing implements Test.Yes {
public void show()
{
System.out.println("show method of interface");
}
}
// Driver Class
class A {
// main function
public static void main(String[] args)
{
Test.Yes obj;
Testing t = new Testing();
obj = t;
obj.show();
}
}
show method of interface
另一個接口中的接口
一個接口也可以在另一個接口內部聲明。我們將接口稱為 i_name1.i_name2,其中 i_name1 是嵌套該接口的接口的名稱,i_name2 是要實現的接口的名稱。
示例 1
Java
// Java program to demonstrate working of
// interface inside another interface.
import java.util.*;
interface Test {
interface Yes {
void show();
}
}
class Testing implements Test.Yes {
public void show()
{
System.out.println("show method of interface");
}
}
class A {
public static void main(String[] args)
{
Test.Yes obj;
Testing t = new Testing();
obj = t;
obj.show();
}
}
show method of interface
Note: In the above example, the access specifier is public even if we have not written public. If we try to change the access specifier of an interface to anything other than public, we get a compiler error. Remember, interface members can only be public.
示例 2
Java
// Java program to demonstrate an interface cannot
// have non-public member interface.
import java.util.*;
interface Test {
protected interface Yes {
void show();
}
}
class Testing implements Test.Yes {
public void show()
{
System.out.println("show method of interface");
}
}
class A {
public static void main(String[] args)
{
Test.Yes obj;
Testing t = new Testing();
obj = t;
obj.show();
}
}
illegal combination of modifiers: public and protected protected interface Yes
這是另一個 Java 程序示例,演示了嵌套接口的使用:
Java
public class OuterClass {
// Nested interface
public interface NestedInterface {
public void nestedMethod();
}
public static void main(String[] args)
{
// Implement nested interface
NestedInterface nested = new NestedInterface() {
public void nestedMethod()
{
System.out.println(
"Hello from nested interface!");
}
};
// Call nested interface method
nested.nestedMethod();
}
}
Hello from nested interface!
在此示例中,我們在 OuterClass 內有一個嵌套接口 NestedInterface。然後,我們在 main 方法中使用匿名內部類實現該接口,並調用其方法nestedMethod()。這隻是在 Java 中使用嵌套接口的一種方法。
嵌套接口的使用
在 Java 中,嵌套接口可用於多種目的,包括:
- 將相關接口分組在一起:通過將一個接口嵌套在另一個接口中,您可以以更具邏輯性和可讀性的方式組織相關接口。這可以使您的代碼更易於理解和維護。
- 要創建更安全的代碼:通過將接口嵌套在類中,您可以限製其範圍並防止在該類之外訪問它。這可以使您的代碼更加安全並且不易出錯。
- 實現多個接口:通過嵌套接口,您可以在單個類中實現多個接口,而不會因過多的接口名稱而使全局命名空間變得混亂。
- 創建回調:嵌套接口可用於創建回調函數,其中一個對象可以傳遞給另一個對象,並且該對象可以回調嵌套接口中定義的方法。
- 定義類之間的契約:通過使用嵌套接口,您可以在類之間定義契約,其中每個類實現相同的接口,但提供自己的實現。這可以使您的代碼更加模塊化並且更易於測試。
相關用法
- Java Number byteValue()用法及代碼示例
- Java Number doubleValue()用法及代碼示例
- Java Number floatValue()用法及代碼示例
- Java Number intValue()用法及代碼示例
- Java Number longValue()用法及代碼示例
- Java Number shortValue()用法及代碼示例
- Java NavigableMap ceilingEntry()用法及代碼示例
- Java NavigableMap ceilingKey()用法及代碼示例
- Java NavigableMap clear()用法及代碼示例
- Java NavigableMap firstEntry()用法及代碼示例
- Java NavigableMap floorEntry()用法及代碼示例
- Java NavigableMap floorKey()用法及代碼示例
- Java NavigableMap headMap()用法及代碼示例
- Java NavigableMap higherEntry()用法及代碼示例
- Java NavigableMap higherKey()用法及代碼示例
- Java NavigableMap isEmpty()用法及代碼示例
- Java NavigableMap lastEntry()用法及代碼示例
- Java NavigableMap lowerEntry()用法及代碼示例
- Java NavigableMap lowerKey()用法及代碼示例
- Java NavigableMap pollFirstEntry()用法及代碼示例
- Java NavigableMap pollLastEntry()用法及代碼示例
- Java NavigableMap put()用法及代碼示例
- Java NavigableMap size()用法及代碼示例
- Java NavigableSet add()用法及代碼示例
- Java NavigableSet addAll()用法及代碼示例
注:本文由純淨天空篩選整理自佚名大神的英文原創作品 Nested Interface in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。