黑马程序员技术交流社区

标题: 关于子类调用父类方法的原理,求指导 [打印本页]

作者: chulangren2    时间: 2014-8-4 22:51
标题: 关于子类调用父类方法的原理,求指导
        class A {
            void fun1() {
                      System.out.println(fun2());
                }
                int fun2() {
                        return 123;
                }
        }
         public class B extends A {
                int fun2() {
                         return 234;
                 }
              public static void main(String args[]) {
                        B b = new B();
                        b.fun1();
                        A a = b;
                        a.fun1();
                }
        }
打印出的结果都是234具体原理是什么?
作者: fxwb2005    时间: 2014-8-4 23:20
本帖最后由 fxwb2005 于 2014-8-4 23:25 编辑

A a=b父类引用指向子类对象
只不过是将父类引用指向子类内存空间。
而且重写了父类方法,
你用a去调用fun1(),fun1()里面的fun2()前面其实隐藏一个this.
调用fun1()的对象是a,
那么this也就是a,
那么肯定是先执行子类里面的,
子类里面没有,
才会执行父类里面的。

作者: dreamseekerkun    时间: 2014-8-4 23:56
楼上正解。。。
作者: chulangren2    时间: 2014-8-5 00:02
fxwb2005 发表于 2014-8-4 23:20
A a=b父类引用指向子类对象
只不过是将父类引用指向子类内存空间。
而且重写了父类方法,

你讲的挺好的,那么B  b = new B()  b.fun1()  该怎么解释呢?
作者: fxwb2005    时间: 2014-8-5 00:20
chulangren2 发表于 2014-8-5 00:02
你讲的挺好的,那么B  b = new B()  b.fun1()  该怎么解释呢?

A a=b 向上转型是为了实现多态。
其实你直接用b也是一样的,没什么区别。
作者: wnmmp    时间: 2014-8-5 00:30
父类引用指向子类,对于成员函数——编译看 = 左边,运行看 = 右边。




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