当前位置: 首页 > 面试题库 >

Java:在匿名内部类中调用外部类方法

韩嘉祯
2023-03-14
问题内容

最近,我遇到了一个神秘的问题,在Android项目,我描述了这里。我以某种方式解决了问题,但仍然不知道其背后的确切原因。

假设我想在内部类中调用函数foo()。问题是,直接调用它有什么区别

foo();

或使用外部类实例对其进行调用

OuterClass.this.foo();

此外,如果有人能检查我与此相关的最后一个问题,并向我提供有关错误发生原因的线索,我将不胜感激。非常感谢。

PS:我在某处读到,非静态内部类将始终持有外部类的实例。因此,如果我仅使用foo(),它将使用该实例调用外部函数?


问题答案:

后者更为明确,如果内部类中存在相同名称的方法,则可以调用外部类方法。

class OuterClass {
    void foo() { System.out.println("Outer foo"); }

    View.OnClickListener mListener1 = new View.OnClickListener() {
        void foo() { System.out.println("Inner foo"); }

        @Override public void onClick(View view) {
            foo(); //Calls inner foo
            OuterClass.this.foo(); //Calls outer foo
        }
    }

    View.OnClickListener mListener2 = new View.OnClickListener() {
        @Override public void onClick(View view) {
            foo(); //Calls outer foo
            OuterClass.this.foo(); //Calls outer foo
        }
    }
}


 类似资料:
  • 在以下片段中: 有没有办法从内部匿名类引用匿名类的外部实例? 第二个错误是在解决方案上,我在这里找到了一个匿名内部类的外部类的关键字。这些问题似乎共享一些概念和问题空间,但性质不同。

  • 问题内容: 请看下面的代码: 在上面的代码中,在方法ModifyList()中声明的匿名内部类的实例能够访问传递给该方法的参数。AFAIK Java为内部类创建一个单独的字节码文件。 谁能解释一下Java在字节码级别上如何处理这些局部变量绑定?我的意思是,Java如何精确跟踪对作为参数传递给该方法的对象的引用? 任何帮助将不胜感激! [抱歉我的英语不好! 如果您理解我的问题,请编辑这篇文章,并删除

  • 本文向大家介绍Java匿名类,匿名内部类实例分析,包括了Java匿名类,匿名内部类实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java匿名类,匿名内部类。分享给大家供大家参考,具体如下: 内部类 匿名类  首发日期 :2018-03-25 内部类: 在一个类中定义另一个类,这样定义的类称为内部类。【包含内部类的类可以称为内部类的外部类】 如果想要通过一个类来使用另一个类,可以定

  • 问题内容: 在以下代码段中: 是否有关键字从内部类引用外部类?基本上我想做的是或类似的东西,但是似乎什么也找不到。 问题答案: 通常,你用于引用外部类的封闭实例。 在你的例子中

  • 问题内容: 我已经看到了几个与Java中类似的示例,希望有人可以解释发生了什么。似乎可以内联定义一个新类,这对我来说真的很奇怪。 第一行是预期的输出行,因为它只是toString。但是第二似乎函数可以内联重写。 为此有技术术语吗? 还是任何更深入的文档? 如果我有以下代码: 代码输出: 问题答案: 它是一个匿名内部类。您可以在Java文档内部类链接中找到有关它的更多信息。 编辑 我正在添加一个更好