标签:
分析运行结果,说明原理。(没有分析结果不得分)
 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
 *
标签:
原文地址:http://www.cnblogs.com/sangxiaonian/p/4620057.html