当前位置: 首页 > 知识库问答 >
问题:

在Java中,一个内部类能否从超类中定义的另一个内部类继承?

张溪叠
2023-03-14

我有一个类“C”,它有一个内部类“Ci”。“C”类继承了“S”类。“S”类也有一个内部类“Si”。“Ci”能继承“Si”吗?非常感谢任何回应的人。

public class OuterClass1 {
    class InnerClass1 {
    }
}

public class OuterClass2 extends OuterClass1 {
    class InnerClass2 extends InnerClass1 {
    }
}

这样的事情可能吗?

共有2个答案

程吕恭
2023-03-14

[![在此输入图片说明][1]][1]

它起作用了。我不确定实施能力。只需确保内部类未声明为公共类[1]:https://i.stack.imgur.com/qgTl8.png

南宫炜
2023-03-14

这看起来可能有点奇怪,但Java规范允许这样做。

这里有一个工作示例,使用问题中的文本作为规范:

/*
 * I have a class "C", which has an inner class "Ci". 
 * Class "C" inherits from class "S". 
 * Class "S" also has an inner class "Si". 
 * Can "Ci" inherit from "Si"?
 */

class S {
    class Si {
    }
}

class C extends S {
    class Ci extends Si {
        @Override
        public String toString() {
            return getClass().getSimpleName() + " inside " + C.this.getClass().getSimpleName();
        }
    }
}

public class InnerClasses {

    public static void main(String[] args) {
        C.Ci ci = new C().new Ci();    // outer class instance must be provided
        System.out.println(ci);
    }
}

及其输出:

Ci inside C

实际上只是一个非常基本的例子,通常这样一个内部类应该在它的包含类中创建;否则它不应该是一个内部类。

抱歉,目前没有那么有创意,不是一个真实的例子

 类似资料:
  • 问题内容: 考虑以下嵌套类。 问题答案: 您可以像这样声明一个对象数组。 并实例化它们,您可以在类中执行类似的操作。

  • 我将简单类添加到我的应用程序中: 应用程序应该使用这个类中的一个对象。当我在活动中使用它时: I get error:无法在不同方法Presmena中定义的内部类中引用非最终变量Asortion。JAVA帮助理解,什么是错的

  • 我尝试了下面的代码,根据它,我理解内部类继承到OuterClass的子类。是正确的吗? 输出除外: 2. 奥特你好。内部的 当这行代码运行时,它应该意味着内部类被继承给了ChildClass 我很困惑,因为我在链接上发现了下面的语句 当外部类由其子类扩展时,成员内部类将不会继承到子类。若要在外部类的子类内使用内部类属性,子类还必须具有内部类,并且该内部类必须扩展外部类的内部类。

  • 伊登 JLS所说的是: 设C是ClassName表示的类。设n是一个整数,使得C是类的第n个词汇封闭类,在该类中出现有条件的this表达式。 [...] 如果当前类不是类C或C本身的内部类,则为编译时错误。 在的情况下,内部类集。这意味着上面的代码应该可以正常工作。发生了什么?

  • 我的主课有两个班(我们称它们为classA和classB)。 是否有机会在classB中设置classA变量? 诸如此类: 非常感谢!问候

  • 问题内容: 我正在使用Apache Commons EqualsBuilder来为非静态Java内部类构建equals方法。例如: 除了声明方法之外,是否有可以参考的引用的语法?有点像(不起作用)? 问题答案: 没有。 最好的方法可能是您所建议的:将getFoo()方法添加到内部类中。