从内部类对象访问外部类函数的方法

3

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

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()"?如果可以,如何实现?


1
你不能这样做,你为什么会认为你可以呢? - Boris the Spider
为什么你明明可以从外部调用,却要在内部类中调用呢? - SMA
重复:https://dev59.com/TnI-5IYBdhLWcg3whIqk - Ankur Anand
4个回答

4
简短回答:在Inner内,对Outer.this的引用是私有的,因此您无法从Inner的实例中访问对Outer实例的引用。
您可以通过以下方式导出此引用:
class Outer {
    Outer() {
    }

    class Inner {
        Inner() {
        }

        public Outer getOuter() {
            return Outer.this;
        }
    }

    void func() {
        System.out.println("Outer");
    }
}

那么您只需要这样做:
ii.getOuter().func();

刚想写完全相同的答案(甚至包括相同的方法名称) - Rohit Jain
@BoristheSpider 看来所有伟大的思想家都想到了同一个函数名称:Jon Skeet在这里提出了同样的问题https://dev59.com/TnI-5IYBdhLWcg3whIqk - Ankur Anand
@user3554962,与其回复感谢,请考虑接受一个答案,如果您的问题得到了解答。 - Boris the Spider

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
 }
}

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


    }
}

1
从内部类使用Outer.this.func()。 请注意,您只能从内部类中执行此操作,而不能从外部执行。

它回答了这个问题。仔细阅读问题的最后一行。 - Distjubo
是的,从内部类的对象中。我有一个Inner ii,如何使用您的方法调用func() - Boris the Spider
是吗?我在你的回答中没有看到任何关于“new”或“method”的提及。你的回答只是说_从内部类使用Outer.this.func()_。我仍然坚持认为这个答案甚至不能接近回答问题。也许评论可以澄清一些事情,但答案仍然是无用的。 - Boris the Spider
如果您对我的回答不满意,请随意编辑它。 - Distjubo
再读一遍,如果我告诉你只能使用内部类的作用域,你会怎么做? - Distjubo
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接