Java 在已创建的外部类对象上访问内部类方法
假设我有这样的课:Java 在已创建的外部类对象上访问内部类方法,java,inner-classes,nested-class,Java,Inner Classes,Nested Class,假设我有这样的课: class Outer { public void getOuterValue() { } class Inner { public void getInnerValue() { } } } 我知道我可以创建此类对象,如下所示: Outer outer = new Outer(); Outer.Inner inner = outer.new Inner(); 但是让我们假设我从其他方法获得这个对象: void someMetho
class Outer {
public void getOuterValue() { }
class Inner {
public void getInnerValue() { }
}
}
我知道我可以创建此类对象,如下所示:
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
但是让我们假设我从其他方法获得这个对象:
void someMethodSomewhere(Outer o) {
// How do I call getInnerValue() here using o?
}
在上面的场景中,有没有一种方法可以使用“o”调用“getInnerValue”方法
请让我知道。否。您需要有一个
内部
的实例才能对其调用方法
一个外部类的实例是不够的(它会反过来工作:内部类实例有一个对外部类实例的引用)
你不能。getInnerValue()是内部的一个方法。外部不是内部,也没有对内部的引用。当你被交给
o
时,没有办法从它导航到任何内部实例,因为没有一个与o
相关联的实例。我尝试了“o.getInnerValue()”,但不幸的是它不起作用。@LutzHorn不,你不能这样做。Inner是一个成员实例,它需要一个Outer的实例,因此是Outer.new Inner,而不是new Outer.Inner()@Lutz Horn不,它不能工作!可能有任意数量的internal
类型的对象,所以理论上它甚至不能工作。我明白了。所以,我想,我必须去掉内部类,并在外部类上使用方法。或者传入internal
的实例。谢谢你的帮助。有没有办法把它和“o”联系起来?我想,如果o
有一个Inner的实例,我可以在“Outer”中保留一个“Inner”的实例,当然可以。这与o
拥有StringBuffer或ArrayList或其他任何东西的实例没有什么不同。描述中所写的代码不包含任何属于o
或可从o
访问的内部实例。是的,我希望不保留该实例,这就是为什么我没有在描述中包含该实例。谢谢你的解释!
void someMethodSomewhere(Outer o) {
// How do I call getInnerValue() here using o?
}