4

为什么可以将内部(又名非静态嵌套)类定义到接口中?

这有什么意义吗?它们不能存在于包含接口的实例中,因为接口不能被实例化,所以......

以下确实编译:

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;
        }
    }
}

以上2个类之间有什么区别吗?实际是static考虑到了吗?请注意,如果您更改interface为' class,显然会出现编译错误。InnerClassstatic 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;
        }
    }
}

与外部包含实体是一个类不同,这里当然没有“内部(非静态嵌套)类可以访问外部的字段而静态嵌套类不能”这样的事情,因为,鉴于我们的外部事物是一个接口,我们的c整数是隐式静态的...interface的嵌套类也是隐式静态的吗?

所以再一次,是StaticNestedClassInnerClass只是一样吗?

4

1 回答 1

3
class InnerClass 

是隐式的(由编译器根据JLS,第 9.5 节转换为)

接口中的成员类型声明是隐式静态和公共的。允许冗余指定这些修饰符中的一个或两个。

static class InnerClass

因为它在一个界面中。

将接口更改为类时会出现错误,因为不允许使用非静态内部类,并且在类的情况下它不会隐式转换为静态。

要直接回答您的最后一个问题,

是的,StaticNestedClass而且InnerClass是一样的

于 2013-10-17T16:58:20.450 回答