我们可以将接口声明为类或另一个接口的成员。这样的接口称为成员接口或嵌套接口。类中的接口当在任何其他类之外声明时,接口(或类)只能具有公共和默认访问说明符。参考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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。