问答详情
源自:10-2 多态中的引用类型转换

不懂多态,求大神解惑

比如

Vehicle v=new Car();

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

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

提问者:dongbian 2016-01-30 19:46

个回答

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

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


  • 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类的地址空间?那么,第二句话在实际编写代码中有什么地方会用到呢?


  • 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();