思考题:写出结果
class A {
public void show() {
show2();
}
public void show2() {
System.out.println("我");
}
}
class B extends A {
public void show2() {
System.out.println("爱");
}
}
class C extends B {
public void show() {
super.show();
}
public void show2() {
System.out.println("你");
}
}
public class MyTest {
public static void main(String[] args) {
A a = new B();
a.show();
B b = new C();
b.show();
}
}
解析:首先,从main方法看起,A a = new B(); a.show();执行完这两句后,先去B类找是否有show方法的重写,结果没有,那就使用A类的show方法,由于它调用了show2方法,那么再去看B类有没有show2方法的重写,结果有,就执行,输出“爱”。B b = new C(); b.show();接着,执行这两句,先去C类找是否有show方法的重写,结果有,但它的重写调用了父类的show方法,而父类B没有show方法,那再找上一层A类的show方法,找到后执行,由于它调用了show2方法,那么再去看C类有没有show2方法的重写,结果有,就执行,输出“你”。
结果:
爱
你