这种方法的解释?

时间:2018-06-04 07:08:47

标签: java polymorphism

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()调用类A method2()内的method1()类调用B而不是method1()A

3 个答案:

答案 0 :(得分:3)

method1()

B会覆盖类method1()的{​​{1}},因此在运行时类型为A的实例上调用method1()将会执行B课程的method1()。对B的调用是通过类method1()的方法完成的,这无关紧要。

答案 1 :(得分:0)

调用

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

答案 2 :(得分: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”
  4. 我希望这可以解释一下。