gpt4 book ai didi

java - 从外部类继承内部类与其他内部类

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:19:15 25 4
gpt4 key购买 nike

我很困惑为什么这是允许的

public class Foo {
class Bar extends Foo {
}
}

这是不允许的

public class Foo {
class Bar extends Foo {
}

class Fooey extends Bar {
}
}

在调用父类(super class)型构造函数之前,编译器通知它不能引用 Fooey.this。

这是允许的

public class Foo {
static class Bar extends Foo {
}

class Fooey extends Bar {
}
}

这是怎么回事?我在哪里可以找到有关内部类继承如何工作的更多信息?

编辑 我想到了两个相当糟糕的想法;内部类扩展外部类,内部类扩展其他静态内部类。我不确定到底发生了什么以及我应该如何重构它。我最终只是抽出内部类并将它们封装在外部类中。

最佳答案

首先:不要做这种事。这是邪恶的。真的,Java 1.1 应该被指定得更加严格,IMO。

Foo.Fooey 构造函数中使用哪个 this 存在混淆。外部的 this (Foo.this) 可以工作。但是实际的 this 是一个 Foo 但它不能传递给超构造函数,因为在超构造函数返回之前使用 this 的规则(和除了有一个外部实例之外,与内部实例相同的实例也被搞砸了)。由于 this 的使用限制,父类(super class)“((Bar)this).this$0”(IIRC) 上的外部 this 也是不可访问的。

解决方案是明确的。在我的书中,明确通常是一件好事(除非它变成样板)。

public class Foo {
class Bar extends Foo {

}

class Fooey extends Bar {
Fooey() {
Foo.this.super();
}
}
}

更好的是,不要让内部类扩展它自己的外部类,或扩展任何内部类。

关于java - 从外部类继承内部类与其他内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1589522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com