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