运行时如何选择外类方法和超类之间的调用方法?

Ser*_*yan 2 java oop jvm

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

 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");
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在,当callMethod()调用它时,它调用超类的方法并打印"Called InnerBase的方法".如果我试图在IDE(Eclipse)上调用callMethod()中调用的方法()上的"Open Declaration",那么它将转到外部类中的方法.令人困惑的是,一个人称之为真实.能否建议或提供一些解释在外类和超类中选择同名执行方法的情况的材料.先感谢您.

Mar*_*aux 5

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

public void callMethod()
{
    Main.this.method();
}
Run Code Online (Sandbox Code Playgroud)

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

InnerBase.method()是自己方法的一部分.所以这比较接近Main.method(),因为Main.method()是另一个不相关的类的一部分.如果你有其他method()Inner,那就选择的方法,因为它是在同一个班级.