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

这个内部类继承示例是如何工作的?

孔理
2023-03-14

我正在阅读关于从内部类继承的内容,我一直在努力理解下面的代码是如何工作的:

class Outer{
    class Inner{
    }
}
class Derived extends Outer.Inner{
    Derived(Outer o){
        o.super();
    }
}

据我所知,关键字Super指的是超类,Super()指的是它没有参数构造函数。在外层类的情况下,超类是Object类。
我想了解一下,这段代码是如何工作的。
为什么Object类的实例化使扩展内部类成为可能?
创建Object类实例与创建外层类对象有什么关系?

删除包含"o.super();"的行会导致错误:
java:包含p的封闭实例。外层。内层是必需的

我读了很多文章,但我不知道它是如何工作的<如果有任何答案,我将不胜感激。

共有3个答案

祁承望
2023-03-14

类内部称为嵌套的内部类,并以这样的方式绑定到外部类,即在初始化时需要使用这样的外部类的实例。内部=(new Outer())。新建内部()

如果您的内部类是使用静态修饰符声明的,那么它将是一个静态嵌套类,初始化它的新实例时不需要外部类的实例,例如:Outer。内部=新的外部.内部()

傅长恨
2023-03-14

为什么对象类的实例化使扩展内部类成为可能?

在内部实例中,需要外部实例作为的内部实例。没有外部实例就拥有它是没有意义的。如果有一个内部而没有外部是有意义的,那么你会使它成为静态的

创建Object类实例与创建外层类对象有什么关系?

在创建内部实例之前,需要一个外部实例。

我读了很多文章,但我不知道它是如何工作的。

它设置了超类所需的外部实例。

徐瀚
2023-03-14

假设您有一个变量o,它引用外部的一个实例,并且您想创建内部的一个实例,其封闭实例是o的值。您可以拨打:

Outer.Inner inner = o.new Outer.Inner();

它在Java中很少见到(因为通常当您构造内部类时,您使用“this”作为隐式封闭实例来完成),但它是有效的。

这实际上相当于它,但在子类构造函数的上下文中。内部类确实有一个这样的构造函数:

Inner(Outer enclosingInstance)

...这条线实际上是在打电话

super(o)

…只是它在语法中没有以这种方式表示,以区分这个“特殊”信息和任何常规参数。

 类似资料:
  • 问题内容: 当存在内部类时,我很难理解继承在Java中的工作方式。我目前正在处理一些子类需要稍微更改其父类的内部类功能的事情。我在下面提出了一个更简单,类似的示例。 我希望此代码可以打印“我是ChildClass.InnerClass”,但可以打印“我是ParentClass.InnerClass”。为什么是这样?另外,如果我将main中的obj对象更改为ChildClass类型,则输出将更改为“

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

  • 问题内容: 我们有下课: 输出为: 超 子 问题: 什么礼物?是父级的对象,哪个孩子作为字段保留? 如果是这样,抽象类的继承如何工作?您不能创建抽象类的实例。 如果不是,重写方法在哪里保留? 我尝试使用Google,但发现的只是关于如何继承类的常见信息。 更新: 您仍在告诉我明显的事情。也许我的问题没有引起误解,但我将尝试改写一下: 当我们使用调用方法时,您说的是,我们正在访问父级的方法。但是,如

  • 问题内容: 我正在使用Java 6。 我无法让内部类使用与其包含的类相同的泛型类。目前我有 现在我得到警告 类型参数T隐藏了类型T 如果我从内部类中删除类型参数(即从行中删除),则会在该行上出现编译错误。 我怎样才能使一切正确? 问题答案: 您可以: 从(即,使其成为非泛型的)中移除类型参数-仍然可以访问external 。 将class中的type参数重命名为(say)。 [更新] 下面是四种重

  • 是什么使得在类本身内部创建类的实例成为可能? 我知道这是可能的,我自己也做过,但我仍然无法让自己相信这不是“谁是第一个——鸡还是蛋?”问题的类型。我很高兴收到一个答案,它将从编程角度以及JVM/编译器角度阐明这一点。我认为理解这一点将有助于我澄清OO编程中一些非常重要的瓶颈概念。 我收到了一些答案,但没有一个能达到我预期的程度。

  • 问题内容: 在插槽上的Python数据模型参考部分中,有关于使用的注释列表。我对第一项和第六项感到完全困惑,因为它们似乎相互矛盾。 第一项: 从没有的类继承时,该类 的属性将始终可访问,因此 子类中的定义是没有意义的。 第六项: 声明的动作仅限于定义它的类。结果,子类将具有一个, 除非它们也定义 (该子类只能包含任何其他插槽的名称)。 在我看来,这些项目可能更好地措辞或通过代码显示,但是我一直在努