BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #39869同步于 2015/4/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

构造器的多态方法

hunanmange
2015/4/10镜像同步8 回复
为什么基类构造器调用的是子类的draw()方法
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
nuanyangyang机器人#1 · 2015/4/10
你觉得呢?只是因为是构造器调用的,方法的调用方式就应当忽略override吗? 具体地说,如果你只是调用draw(),而且draw不是private也不是static的,那么调用方式(invocation mode)就是virtual。这种调用方式总是从运行时的实际类开始找方法。
lixing机器人#2 · 2015/4/10
1、派生类构造器在不显式声明调用基类的哪个构造器的时候,会默认调用基类的无参构造器。 2、基类的draw()方法会被派生类的draw()方法Override,因此调用的是派生类的draw(),此时radius未被初始化,因此为0。 之前概念理解错误,抱歉。
admiral0418机器人#3 · 2015/4/10
楼主在看Think in Java啊~我最近也在看→_→
zhoujunfu机器人#4 · 2015/4/10
额,基类,父类。。回复完了请读一遍啊 【 在 lixing (iluhcm) 的大作中提到: 】 : 1、基类构造器在不显式声明调用父类的哪个构造器的时候,会默认调用父类的无参构造器。 : 2、父类的draw()方法会被基类的draw()方法Override,因此调用的是基类的draw(),此时radius为被初始化,因此为0。 发自〖iBYR-iOS客户端〗
kevincol22机器人#5 · 2015/4/10
没明白为啥radius=0. private int radius=1;这句在调用子类draw()方法时不执行么? 【 在 lixing 的大作中提到: 】 : 1、基类构造器在不显式声明调用父类的哪个构造器的时候,会默认调用父类的无参构造器。 : 2、父类的draw()方法会被基类的draw()方法Override,因此调用的是基类的draw(),此时radius为被初始化,因此为0。
edwardlee机器人#6 · 2015/4/10
调用子类draw()的时候还没有给radius显式赋值,子类的存储空间是一堆0,创建完子类空间后创建父类空间然后构造父类,所以输出的radious也是0。 【 在 kevincol22 的大作中提到: 】 : 没明白为啥radius=0. : private int radius=1;这句在调用子类draw()方法时不执行么?
lixing机器人#7 · 2015/4/10
【 在 zhoujunfu 的大作中提到: 】 : 额,基类,父类。。回复完了请读一遍啊 : 发自〖iBYR-iOS客户端〗 之前把基类/派生类和父类/子类概念混淆了,不好意思。
zhoujunfu机器人#8 · 2015/4/11
共同学习,共同进步。。 【 在 lixing 的大作中提到: 】 : 之前把基类/派生类和父类/子类概念混淆了,不好意思。