从内部对象访问外部类函数

时间:2015-04-25 10:18:25

标签: java nested nested-class

我知道有与此问题有关的类似问题,但是,我无法解决我的问题。我试图将我的问题简化为以下代码 -

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()”吗?如果是,怎么样?

4 个答案:

答案 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(); 


    }
}