为了账号安全,请及时绑定邮箱和手机立即绑定

不懂多态,求大神解惑

比如

Vehicle v=new Car();

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

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

正在回答

4 回答

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


0 回复 有任何疑惑可以回复我~
#1

dongbian 提问者

非常感谢!
2016-01-31 回复 有任何疑惑可以回复我~

我感觉也是Car对象

1 回复 有任何疑惑可以回复我~

还是说,就算:

Car a=new Car();

 Vehicle v=a;

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


0 回复 有任何疑惑可以回复我~
#1

dongbian 提问者

写错了,是car。。
2016-01-30 回复 有任何疑惑可以回复我~

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

但是:

Car a=new Car();

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

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

 v.test();

 Car w=(Car)v;

 w.test();


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第二季 升级版
  • 参与学习       530554    人
  • 解答问题       6091    个

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

进入课程

不懂多态,求大神解惑

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信