SHA*_*NNA 1 java nested interface
接口内的所有变量都是公共静态和最终变量。
因此,如果我在接口内声明一个嵌套类,它也会变成静态和最终的吗?
Interface I
{
class c
{
static void m(){ }
}
}
Run Code Online (Sandbox Code Playgroud)
让我们一探究竟。让我们创建如下结构:
interface Interface{
class Foo{}
}
Run Code Online (Sandbox Code Playgroud)
现在我们可以测试:
System.out.println("static: " + Modifier.isStatic(Interface.Foo.class.getModifiers()));
System.out.println("final: " + Modifier.isFinal(Interface.Foo.class.getModifiers()));
Run Code Online (Sandbox Code Playgroud)
打印:
interface Interface{
class Foo{}
}
Run Code Online (Sandbox Code Playgroud)
所以嵌套类是隐式静态的,但不是最终的。
我们也可以通过添加class Bar extends Foo{}到我们的界面来确认它。final类不能扩展,但由于这样的代码编译良好,这意味着Foo不是最终的。
嵌套在接口static内部的类的行为类似于嵌套在类中的类,从某种意义上说,您不需要具有外部类的实例来构造嵌套类的实例。根据Java 语言规范第 8.1.3 节:
8.1.3内部类和封闭实例
[...] 接口的成员类是隐式静态的(第 9.5 节),因此永远不会被视为内部类。
但是,这些类不是最终的,除非您明确指定它们。这是有道理的,因为实现接口的类可能需要有机会扩展在接口内定义的嵌套类。
| 归档时间: |
|
| 查看次数: |
600 次 |
| 最近记录: |