分析运行结果,说明原理。(没有分析结果不得分)
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();
}
}
* @author
*
* 分析: 此题主要是是分析继承关系中代码的执行顺序,输出对象为引用类型,多态以及其方法的执行;
* A:从代码可知,类B、A为继承关系,B为子类,A为父类;
* B:因此,首先执行子类即B类中的静态main方法;
* C:执行B b = new B(),对子类内容进行初始化,首先对父类成员变量进行初始化;
* D:执行b.fun1();由于B继承了A,因此在B中有A的两个方法在fun1()中,由于直接输出方法fun2(),则输出的实际为fun2()的toString方法,
* fun2()的返回值为123,但是fun2()在子类中被重写,其返回值变为456,因此最终输出为456;
* E:代码A a = b;即为A a = new B();是父类指向子类的应用,由于有继承关系,因此为多态;
* F:执行代码 a.fun1();多态中调用方法,编译时使用父类中的方法,而在执行时则使用子类中的方法,因此结果仍为456;
*
* 最终结果:输出结果为 456
* 456
*