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
?
答案 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()
运行时,它将按从上到下的顺序运行:
method1()
- 这将打印“B1”我希望这可以解释一下。