这种方法的解释?

问题描述 投票:-1回答:3
public class A {
    public void method1() {
        System.out.print(" A1");
    }

    public void method2() {
        method1();
        System.out.print(" A2");
    }
}

public class B extends A {
    public void method2() {
        super.method2();
        System.out.print(" B2");
    }

    public void method1() {
        System.out.print(" B1");
    }
}

public class B2 {
    public static void main(String args[]) {
        B b = new B();
        b.method2();
    }
}

为什么method1()在类Amethod2()内部调用method1()类的B而不是method1()类的A

java polymorphism
3个回答
3
投票

method1()B覆盖了method1()类的A,因此在运行时类型为method1()的实例上调用B将执行method1()类的B。对method1()的调用是通过类A的方法完成的并不重要。


0
投票

调用来自类B的method1(),因为“this”引用在调用时引用类型B()的Object


0
投票

在查看代码时,super.method2()只是从类method2()中调用A

因此,尝试通过复制和粘贴进行替换来简化所有内容;这样,类B变成:

public class B extends A {
    public void method2() {
        method1();
        System.out.print(" A2");
        System.out.print(" B2");
    }

    public void method1() {
       System.out.print(" B1");
    }
}

在这里你可以清楚地看到,当行b.method2()运行时,它将按顺序从上到下运行:

  1. method1() - 这将打印“B1”
  2. 打印“A2”
  3. 打印“B2”

我希望这可以解释一下。

© www.soinside.com 2019 - 2024. All rights reserved.