2

我注意到以下情况:内部类正在调用它的超类和外部类中的方法。这里的代码:

 public class Main
    {

        class Inner extends InnerBase{
           public void callMethod(){
               method();
           }
        }

        void method(){
            System.out.println ("Called Main's method");
        }

        class InnerBase{
            void method(){
                System.out.println ("Called InnerBase's method");
            }
        }
    }

现在当 callMethod() 被调用时,它会调用超类的方法并打印“Called InnerBase's method”。如果我试图在调用方法()的方法()上从 IDE(Eclipse)“打开声明”,那么它将转到外部类中的方法。哪个是真实的令人困惑。您能否建议或提供一些材料来解释在外部类和超类中选择同名执行方法的情况。先感谢您。

4

3 回答 3

5

通过使用合格的 this(JLS §15.8.4. Qualified this),您可以毫无疑问地指定所选方法是什么。

public void callMethod()
{
    Main.this.method();
}

规则很简单:它总是选择最接近的方法。

InnerBase.method()是它自己方法的一部分。所以这比Main.method(), 因为Main.method()是另一个不相关类的一部分。如果你有另一个method()in Inner,那么它会选择那个方法,因为它在同一个类中。

于 2012-12-06T13:14:06.870 回答
2

你在这里有三个类-Main和。是 的孩子,但与他们完全无关。所以,当你调用时,它会调用它的 OWN实现,它继承自.InnerInnerBaseInnerInnerBaseMaincallMethod()InnerBasemethod()InnerBase

如果您想调用Mains method(),则必须明确限定它。

如果eclipse跳转到了错误的方法,那么很可能是eclipse的错误。

于 2012-12-06T13:16:12.630 回答
2

通过使用“合格的这个”。

Main.this.method()

java中的“qualified this”构造是什么意思?

于 2012-12-06T13:18:31.180 回答