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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡文彬 中级黑马   /  2014-3-11 13:56  /  833 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


一下是我的代码
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();
  }
}
求高人指点

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 何建明 于 2014-3-11 15:02 编辑

a  =  b  这句以后, 实际上 后面的 a.fun1()  和上面的 b.fun1() 等同了。如果b.fun1() 明白了,下面就不用说咯。
回复 使用道具 举报
应该是父类引用指向子类对象吧。
建议,看看毕老师基础视频。
回复 使用道具 举报
A a;
    B b = new B();
        b.fun1();//这里是子类调用的还是从父类继承的方法。并非多态
            a = b;//这里把子类的对象引用赋值给了父类引用。
        a.fun1();//这里调用属于多态行为了。调用的还是从父类继承过来的fun1(),然后调用子类的fun2()

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
Java中的引用变量有两种类型:编译时类型和运行时类型,当两种类型不一致时,就有可能会发生多态。
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马