我知道我可以从内部类中访问外部类的方法。 像下面的类:
class outer {
void outerMethod() {}
class inner {
void innerMethod() {
outerMethod();
}
}
}
我想知道如果我扩展内部类怎么能这样做?
我想做以下事情:
class newClass extends outer.inner {
void innerMethod() {
outerMethod();
}
}
我希望能够从method()
newClass
答案 0 :(得分:2)
非静态inner
类的实例需要存在它将属于的outer
类实例。
所以要使class newClass extends outer.inner {
编译你需要
inner
类设为静态,并删除outer
类实例存在的要求(但这也会限制您的课程)inner
属于某个outer
实例,您可以通过在类的构造函数中调用outerInstance.super()
来扩展此内部类。 对于选项2,可能最简单的解决方案是将outer
的实例显式传递给您的类,如
class newClass extends outer.inner {
private outer o;
public newClass(outer outerInstance) {
outerInstance.super();
this.o = outerInstance;
}
void innerMethod() {
o.outerMethod();
}
}
现在,您只需在传递的outerMethod()
类实例上调用outer
即可。
但请记住,只有当此方法对outerMethod
具有适当的可见性时,才可以调用newClass
。因此,尽管inner
能够使用其外部类的任何方法,但newClass
可能无法访问它。