黑马程序员技术交流社区

标题: 继承小问题 [打印本页]

作者: 由然自美    时间: 2013-12-28 21:01
标题: 继承小问题
本帖最后由 由然自美 于 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();
               }
        }
这个可以运行吗?运行结果是多少?分析分析.


作者: 飞一样    时间: 2013-12-28 21:07
运行结果是466
作者: 飞一样    时间: 2013-12-28 21:08
之前那个发错了,运行结果是456,456

作者: 杨道红    时间: 2013-12-28 22:01
b.fun1()执行继承A类的fun1(),这时调出B类重写的fun2(),返回456
A a = b;其实是多态的表现,输出结果和上面的一样。也是456
作者: 刘汉文    时间: 2013-12-29 18:22
在多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。


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


在多态中,静态成员函数的特点:
无论编译和运行,都参考做左边。
作者: 克锋    时间: 2013-12-29 19:22
这就是方法的覆盖啊,亲~~,当然都是子类的实现了
作者: 浮出一个美    时间: 2013-12-29 20:22
要看调用的方法是子类的还是父类的,你直接看是谁的实例就行了。
子类的实例就调用子类的覆盖方法,即使左边的引用是父类的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2