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