sal*_*sal 7 java inheritance inner-classes
我很困惑为什么这是允许的
public class Foo {
class Bar extends Foo {
}
}
Run Code Online (Sandbox Code Playgroud)
但这是不允许的
public class Foo {
class Bar extends Foo {
}
class Fooey extends Bar {
}
}
Run Code Online (Sandbox Code Playgroud)
编译器通知它在调用超类型构造函数之前无法引用Fooey.this.
这是允许的
public class Foo {
static class Bar extends Foo {
}
class Fooey extends Bar {
}
}
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?我在哪里可以找到有关内部类继承如何工作的更多信息?
编辑我遇到了两个相当糟糕的想法; 内部类扩展外部类,内部类扩展其他静态内部类.我不确定到底发生了什么以及我应该如何重构这一点.我最终只是将内部类拉出来并将它们封装在外部类中.
首先:不要做这种事情.这是邪恶的.实际上,Java 1.1应该被更严格地指定,IMO.
关于this
从Foo.Fooey
构造函数中使用哪些内容存在困惑.外部this(Foo.this
)可以工作.但实际this
是a Foo
但它不能传递给超级this
构造函数,因为在超级构造函数返回之前使用的规则(除了有一个外部实例与内部实例相同的实例被填满).((Bar)this).this$0
由于使用限制,超级" "(IIRC)上的外部也是无法访问的this
.
解决方案是明确的.明确在我的书中通常是一件好事(除非它成为样板).
public class Foo {
class Bar extends Foo {
}
class Fooey extends Bar {
Fooey() {
Foo.this.super();
}
}
}
Run Code Online (Sandbox Code Playgroud)
更好的是,没有内部类扩展自己的外部类,或扩展任何内部类.