當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java Nested用法及代碼示例


我們可以將接口聲明為類或另一個接口的成員。這樣的接口稱為成員接口或嵌套接口。類中的接口當在任何其他類之外聲明時,接口(或類)隻能具有公共和默認訪問說明符。參考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 中,嵌套接口可用於多種目的,包括:

  1. 將相關接口分組在一起:通過將一個接口嵌套在另一個接口中,您可以以更具邏輯性和可讀性的方式組織相關接口。這可以使您的代碼更易於理解和維護。
  2. 要創建更安全的代碼:通過將接口嵌套在類中,您可以限製其範圍並防止在該類之外訪問它。這可以使您的代碼更加安全並且不易出錯。
  3. 實現多個接口:通過嵌套接口,您可以在單個類中實現多個接口,而不會因過多的接口名稱而使全局命名空間變得混亂。
  4. 創建回調:嵌套接口可用於創建回調函數,其中一個對象可以傳遞給另一個對象,並且該對象可以回調嵌套接口中定義的方法。
  5. 定義類之間的契約:通過使用嵌套接口,您可以在類之間定義契約,其中每個類實現相同的接口,但提供自己的實現。這可以使您的代碼更加模塊化並且更易於測試。


相關用法


注:本文由純淨天空篩選整理自佚名大神的英文原創作品 Nested Interface in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。