我知道我可以从内部类中访问外部类的方法。 就像下面的类一样:
class outer {
void outerMethod() {}
class inner {
void innerMethod() {
outerMethod();
}
}
}
我想知道如果我扩展内部类我该怎么做?
我想要执行以下操作:
class newClass extends outer.inner {
void innerMethod() {
outerMethod();
}
}
我希望能够从 newClass
访问 method()
最佳答案
非静态inner
类的实例需要存在它所属的outer
类实例。
因此,要使 class newClass extends external.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();
}
}
现在您只需在传递的 outer
类实例上调用 outerMethod()
即可。
但请记住,只有当 outerMethod
对您的 newClass
具有适当的可见性时,才可以调用该方法。因此,尽管 inner
能够使用其外部类的任何方法,但您的 newClass
可能无法访问它。
关于java - 扩展内部类后访问外部类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31326677/