📜  Java中的嵌套接口

📅  最后修改于: 2022-05-13 01:54:54.257000             🧑  作者: Mango

Java中的嵌套接口

我们可以将接口声明为类或另一个接口的成员。这样的接口称为成员接口或嵌套接口。

类中的接口
当在任何其他类之外声明时,接口(或类)只能具有公共和默认访问说明符(有关详细信息,请参阅this)。在类中声明的这个接口可以是默认的、公共的、受保护的而不是私有的。在实现接口时,我们将接口称为c_name.i_name ,其中c_name是它嵌套的类的名称,而i_name是接口本身的名称。
让我们看一下以下代码:-

// 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 

上面示例中的访问说明符是默认值。我们也可以分配公共的、受保护的或私有的。下面是一个受保护的例子。在这个特定的示例中,如果我们将访问说明符更改为私有,我们会得到编译器错误,因为派生类试图访问它。

// 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");
    }
}
  
class A
{
    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是要实现的接口的名称。

// 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 

注意:在上面的例子中,即使我们没有写 public,访问说明符也是 public。如果我们尝试将接口的访问说明符更改为 public 以外的任何内容,我们会得到编译器错误。请记住,接口成员只能是公共的..

// 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