接口中的所有变量都是公共静态的和最终的。在接口中嵌套的类是隐式静态还是最终的?
所以,如果我声明一个接口内嵌套的类,它也会变成静态的和最终的?
Interface I
{
class c
{
static void m(){ }
}
}
接口中的所有变量都是公共静态的和最终的。在接口中嵌套的类是隐式静态还是最终的?
所以,如果我声明一个接口内嵌套的类,它也会变成静态的和最终的?
Interface I
{
class c
{
static void m(){ }
}
}
让我们来了解一下。让我们创建结构,如:
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
不是最终的。
嵌套在接口内部的类的行为类似于嵌套在类内部的类,因为您不需要拥有外部类的实例来构造嵌套类的实例。根据Java Language Specification, §8.1.3:
8.1.3 内部类和实例围
[...]甲构件类的接口的是隐式静态的(§9.5),所以从不认为是一种内类。
但是,这些类不是最终的,除非您明确指定它们。这是有道理的,因为实现接口的类可能需要扩展接口内定义的嵌套类的机会。
我在问接口内部的类是静态的吗? – SHAMBANNA
为什么它不是最后的 – SHAMBANNA
如果它是内在的,它就是静态的。你的意思是'嵌套'类。 – EJP