嵌套类是否在接口内隐式静态且最终?

时间:2017-04-21 11:02:45

标签: java interface nested

接口内的所有变量都是public static和final。

因此,如果我在一个接口中声明一个嵌套类,它也会变成静态和最终的吗?

Interface I
{
    class c
    {
        static void m(){ }
    }
}

2 个答案:

答案 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节),因此永远不会被认为是内部类。

但是,这些类不是最终的,除非您明确指定它们。这是有道理的,因为实现接口的类可能需要扩展在接口内定义的嵌套类的机会。