黑马程序员技术交流社区

标题: 多态内部到底是怎么实现的呀 [打印本页]

作者: 胡文彬    时间: 2014-3-11 13:56
标题: 多态内部到底是怎么实现的呀

一下是我的代码
class A {
  void fun1() {
    System.out.println(fun2());
  }
  int fun2() {
    return 123;
  }
}
class B extends A {
  int fun2() {
    return 456;
  }
  public static void main(String argv[]) {
    A a;
    B b = new B();
b.fun1();//子类创建自己对象,调用的是fun2()这个我知道.
    a = b;//
a.fun1();//为什么多态中父类对象指向子类对象.调用的还是fun2();
  }
}
求高人指点
作者: 何建明    时间: 2014-3-11 14:54
本帖最后由 何建明 于 2014-3-11 15:02 编辑

a  =  b  这句以后, 实际上 后面的 a.fun1()  和上面的 b.fun1() 等同了。如果b.fun1() 明白了,下面就不用说咯。
作者: 透过生活    时间: 2014-3-11 14:59
应该是父类引用指向子类对象吧。
建议,看看毕老师基础视频。
作者: 房建斌    时间: 2014-3-11 15:01
A a;
    B b = new B();
        b.fun1();//这里是子类调用的还是从父类继承的方法。并非多态
            a = b;//这里把子类的对象引用赋值给了父类引用。
        a.fun1();//这里调用属于多态行为了。调用的还是从父类继承过来的fun1(),然后调用子类的fun2()
作者: 张贺    时间: 2014-3-11 15:07
Java中的引用变量有两种类型:编译时类型和运行时类型,当两种类型不一致时,就有可能会发生多态。




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