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
?
类method1()
的B
覆盖了method1()
类的A
,因此在运行时类型为method1()
的实例上调用B
将执行method1()
类的B
。对method1()
的调用是通过类A
的方法完成的并不重要。
调用来自类B的method1(),因为“this”引用在调用时引用类型B()的Object
在查看代码时,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”我希望这可以解释一下。