ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 嵌套到接口中的类

2019-06-29 08:48:57  阅读:264  来源: 互联网

标签:java static interface jls nested-class


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

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

以下编译:

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有