为什么可以在接口中定义内部(又名非静态嵌套)类?
它有意义吗?它们不能存在于包含接口的实例中,因为接口无法实例化,所以......
以下编译:
interface MyInterface
{
static class StaticNestedClass
{
static int a()
{
return 0;
}
int b()
{
return 1;
}
}
class InnerClass
{
static int a()
{
return 0;
}
int b()
{
return 1;
}
}
}
上述两个班级之间有什么区别吗? static
实际上是否已被考虑在内?
请注意,如果您使用interface
更改class
,则显然会在InnerClass
'static int a()
上收到编译错误。
此外,请看以下内容:
interface MyInterface
{
int c=0;
static class StaticNestedClass
{
static int a()
{
return c;
}
int b()
{
return c+1;
}
}
class InnerClass
{
static int a()
{
return c;
}
int b()
{
return c+1;
}
}
}
与外部包含实体是一个类不同,这里当然没有“内部(非静态嵌套)类可以访问外部字段而静态嵌套类可以” t“,因为,鉴于我们的外部东西是一个接口,我们的c
整数是隐式静态的...... interface
的嵌套类是否也隐式静态?
再一次,StaticNestedClass
和InnerClass
是一样的吗?
答案 0 :(得分:3)
class InnerClass
是隐式的(由编译器根据JLS, Section 9.5转换)
接口中的成员类型声明是隐式静态的 上市。允许冗余地指定其中一个或两个 改性剂。
static class InnerClass
因为它在界面中。
将接口更改为类时会出现错误,因为不允许使用非静态内部类,并且在类的情况下不会将其隐式转换为静态。
直接回答你的最后一个问题,
是的,StaticNestedClass
和InnerClass
是相同的