编程语言
首页 > 编程语言> > java – 嵌套到接口中的类

java – 嵌套到接口中的类

作者:互联网

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

它有意义吗?它们不能存在于包含接口的实例中,因为接口无法实例化,因此……

以下编译:

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个班级之间有什么区别吗?实际上是静态的吗?
请注意,如果使用类更改接口,则显然会在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;
        }
    }
}

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

那么,StaticNestedClass和InnerClass又是一样的吗?

解决方法:

class InnerClass 

是隐式的(由编译器按照JLS, Section 9.5转换)

A member type declaration in an interface is implicitly static and
public. It is permitted to redundantly specify either or both of these
modifiers.

static class InnerClass

因为它在一个界面中.

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

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

是的,StaticNestedClass和InnerClass是一样的

标签:java,static,interface,jls,nested-class
来源: https://codeday.me/bug/20190629/1324929.html