Java中嵌套接口必须通过外部类或接口的限定名访问,不能直接实例化或实现;接口内嵌套接口默认public static,类内嵌套接口可设任意访问修饰符,如private仅限类内使用。

Java中定义嵌套接口,就是在已有类或接口内部再声明一个接口。它不是独立存在的类型,必须通过外部类或外部接口来引用,不能直接用 interfaceName 实例化或实现。
在接口里定义嵌套接口
外部接口中声明的嵌套接口默认是 public static 的,无需显式写这两个修饰符,但必须是 public(否则编译报错)。
- 语法简洁:直接在接口体内部用
interface关键字定义 - 访问方式:必须通过
OuterInterface.NestedInterface引用 - 典型例子:
Map.Entry就是Map接口定义的嵌套接口
在类里定义嵌套接口
类中定义的嵌套接口可使用任意访问修饰符:public、protected、包级(默认)、甚至 private。
-
public:可在任何地方通过ClassName.InterfaceName访问 -
protected或默认:仅限同一包内或子类访问 -
private:仅该类内部可用,外部无法实现或引用(常用于封装内部契约)
实现嵌套接口的写法
实现类需明确写出完整路径名,并实现其方法:
立即学习“Java免费学习笔记(深入)”;
- 例如:若
Test.Yes是类Test内的嵌套接口,则实现类应写class Testing implements Test.Yes - 不能写
implements Yes—— 编译器不认识孤立的Yes - 实例化时也需用完整名:
Test.Yes obj = new Testing();
编译器背后做了什么
Java 编译器会把嵌套接口转为顶层静态接口,名字变成 Outer$Nested,并自动加上 public static 修饰。这意味着它本质上是一个静态成员,与外部类/接口的实例无关。


















