我知道有与此问题有关的类似问题,但是,我无法解决我的问题。我试图将我的问题简化为以下代码 -
class Outer
{
Outer()
{}
class Inner
{
Inner()
{}
}
void func()
{
System.out.println("Outer");
}
}
public class Nested
{
public static void main(String args[])
{
Outer oo = new Outer();
Outer.Inner ii = oo.new Inner();
// ii.func(); I know this won't work
}
}
我可以从内部类“ii”的对象调用外部类函数“func()”吗?如果是,怎么样?
答案 0 :(得分:3)
简短回答:Outer.this
中对private
的引用为Inner
,因此您无法从Outer
的实例访问对Inner
实例的引用
您可以导出此引用:
class Outer {
Outer() {
}
class Inner {
Inner() {
}
public Outer getOuter() {
return Outer.this;
}
}
void func() {
System.out.println("Outer");
}
}
然后你就可以做到:
ii.getOuter().func();
答案 1 :(得分:1)
使用内部类中的Outer.this.func()。 请注意,您只能从内部类而不是从外部执行此操作。
答案 2 :(得分:1)
class Outer {
Outer() {}
class Inner {
Inner() {}
void callFunc() {
Outer.this.func();
}
}
void func() {
System.out.println("Nested");
}
}
public class Nested {
public static void main(String args[]) {
Outer.Inner ii = new Outer().new Inner();
ii.callFunc();
// ii.func(); I know this won't work
}
}
答案 3 :(得分:1)
这对你有用
package com;
class Outer
{
Outer()
{}
class Inner
{
Inner()
{}
public Outer g(){
return Outer.this;}
}
void func()
{
System.out.println("Outer");
}
}
public class Test1
{
public static void main(String args[])
{
Outer oo = new Outer();
Outer.Inner ii = oo.new Inner();
ii.g().func();
}
}