Java 访问外部类';扩展内部类后的s方法
我知道我可以从内部类访问外部类的方法。 像下面的班级:Java 访问外部类';扩展内部类后的s方法,java,class,extend,Java,Class,Extend,我知道我可以从内部类访问外部类的方法。 像下面的班级: class outer { void outerMethod() {} class inner { void innerMethod() { outerMethod(); } } } 我想知道,如果我扩展了内部类,我该怎么做 我想做以下工作: class newClass extends outer.inner { void innerMeth
class outer {
void outerMethod() {}
class inner {
void innerMethod() {
outerMethod();
}
}
}
我想知道,如果我扩展了内部类,我该怎么做
我想做以下工作:
class newClass extends outer.inner {
void innerMethod() {
outerMethod();
}
}
我希望能够从
newClass
访问method()
,非静态内部类的实例需要存在它将属于的外部类实例。
因此,要使类newClass扩展outer.inner{
编译,您需要
将内部
类设置为静态,并删除外部
类实例存在的要求(但这也会稍微限制您的类)
或者确保internal
将属于某个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
具有适当的可见性时才有可能。因此,尽管internal
能够使用其外部类的任何方法,您的newClass
可能无法访问它。抱歉,我现在更正了它。您想要newClass
t吗o是否包含在类外部
中?我认为所有属性和特权都是通过继承传递的,但内部类继承显然不是这样。不,特权不是继承的,这就是为什么扩展内部类很少是好的决定。