/*7、 分析运行结果,说明原理。(没有分析结果不得分)
class A {
void fun1() {
System.out.println(fun2());
}
int fun2() {
return 123;
}
}
public class B extends A {
int fun2() {
return 456;
}
public static void main(String args[]) {
B b = new B();
b.fun1();
A a = b;
a.fun1();
}
}
答:
456
456
分析:首先看主方法里创建了一个B类对象b,然后通过对象b调用方法fun1(),因为B类中没有fun1(),
所以到父类,即A类中去找,我们又发现fun1()中调用了fun2(),而B类又对成员方法fun2()进行了重写,所以输出结果为456;
A a = b的作用是对对象b进行向上转型,但是对象a和对象b所指向的地址值还都是一样的,所以它们仍然表示同一个对象,所以输出还是456。
*/ |
|