当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。