A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 史世锋 中级黑马   /  2015-9-6 21:31  /  622 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.itheima;
/*
* 第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();  //B类为A类的子类,继承了A类的fun1()方法,并复写了A类的fun2()方法
                           //b为B类的实例对象,b调用B类fun1()方法,fun1()方法又调用B类的fun2()方法,故输出“456”
               
                A a = b;   //A a = b,父类变量指向子类实例对象,此为多态
                a.fun1();  //a.fun1(),在编译时期,编译器会检查A类中是否有fun1()方法,如果没有,则编译不会通过
                           //a虽然是A类引用变量,但指向的却是B类的实例对象b,所以在运行时
                           //仍然是调用的B类fun1()、fun2()方法,故输出“456”。最终结果为“456456”
        }
}

3 个回复

倒序浏览
顶。。。
回复 使用道具 举报
挺详细的,赞!!
回复 使用道具 举报
谢谢。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马