不懂多态,求大神解惑

来源:10-2 多态中的引用类型转换

dongbian

2016-01-30 19:46

比如

Vehicle v=new Car();

v.test();调用的就是子类的重写的test()?

明明创建的是父类对象啊?求解!!!

写回答 关注

4回答

  • SunnySty
    2016-01-30 21:35:45
    已采纳

     你可以理解为,用子类a去赋值给父类变量b的时候,会将子类中关于父类的方法和属性直接复制给父类b的变量,因为a能够访问父类方法和属性的前提是继承自父类的方法、属性没有被覆盖,这是由于继承时要保护父类的原因 ,其实父类变量b还是指向的是子类a的代码块,a并没有被Java给回收


    dongbi...

    非常感谢!

    2016-01-31 14:35:55

    共 1 条回复 >

  • 11知足11
    2016-02-01 17:37:16

    我感觉也是Car对象

  • dongbian
    2016-01-30 20:34:51

    还是说,就算:

    Car a=new Car();

     Vehicle v=a;

    v的地址空间仍然是Dog类的地址空间?那么,第二句话在实际编写代码中有什么地方会用到呢?


    dongbi...

    写错了,是car。。

    2016-01-30 20:35:40

    共 1 条回复 >

  • dongbian
    2016-01-30 19:55:55

    额。。不对不对,创建的应该是子类对象,,

    但是:

    Car a=new Car();

     Vehicle v=a;//上两句是不是相当于Vehicle v=new Car();?  

     如果是的话,那第二句不是已经转换成父类类型了么?为什么 v.test();调用的还是子类重写过的方法?

     v.test();

     Car w=(Car)v;

     w.test();


Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530653 学习 · 6091 问题

查看课程

相似问题