接口内的所有变量都是public static和final。
因此,如果我在一个接口中声明一个嵌套类,它也会变成静态和最终的吗?
Interface I
{
class c
{
static void m(){ }
}
}
答案 0 :(得分:4)
让我们找出答案。让我们创建如下结构:
interface Interface{
class Foo{}
}
现在我们可以测试一下:
System.out.println("static: " + Modifier.isStatic(Interface.Foo.class.getModifiers()));
System.out.println("final: " + Modifier.isFinal(Interface.Foo.class.getModifiers()));
打印:
static: true
final: false
所以嵌套类是隐式静态的,但不是最终的。
我们也可以通过向我们的界面添加class Bar extends Foo{}
来确认它。 final
类无法扩展,但由于此类代码编译良好,因此Foo
不是最终的。
答案 1 :(得分:3)
嵌套在接口内的类的行为类似于嵌套在类中的static
类,因为您不需要拥有外部类的实例来构造嵌套类的实例。根据{{3}}:
8.1.3 内部类和附件实例
[...]接口的成员类是隐式静态的(第9.5节),因此永远不会被认为是内部类。
但是,这些类不是最终的,除非您明确指定它们。这是有道理的,因为实现接口的类可能需要扩展在接口内定义的嵌套类的机会。