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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 由然自美 中级黑马   /  2013-12-28 21:01  /  1215 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 由然自美 于 2013-12-29 20:33 编辑

class A {
               void fun1() {
                     System.out.println(fun2());
               }
               int fun2() {
                       return 123;
               }
        }
         publicclass B extends A {
               int fun2() {
                        return 456;
                }
               public static void main(String args[]) {
                       B b = new B();
                       b.fun1();
                       A a = b;
                       a.fun1();
               }
        }
这个可以运行吗?运行结果是多少?分析分析.

评分

参与人数 1黑马币 +3 收起 理由
乔兵 + 3

查看全部评分

6 个回复

倒序浏览
运行结果是466
回复 使用道具 举报
之前那个发错了,运行结果是456,456
回复 使用道具 举报
b.fun1()执行继承A类的fun1(),这时调出B类重写的fun2(),返回456
A a = b;其实是多态的表现,输出结果和上面的一样。也是456
回复 使用道具 举报
在多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。


在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。


在多态中,静态成员函数的特点:
无论编译和运行,都参考做左边。
回复 使用道具 举报
这就是方法的覆盖啊,亲~~,当然都是子类的实现了
回复 使用道具 举报
要看调用的方法是子类的还是父类的,你直接看是谁的实例就行了。
子类的实例就调用子类的覆盖方法,即使左边的引用是父类的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马