返回信息流为什么基类构造器调用的是子类的draw()方法
这是一条镜像帖。来源:北邮人论坛 / java / #39869同步于 2015/4/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
构造器的多态方法
hunanmange
2015/4/10镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
你觉得呢?只是因为是构造器调用的,方法的调用方式就应当忽略override吗?
具体地说,如果你只是调用draw(),而且draw不是private也不是static的,那么调用方式(invocation mode)就是virtual。这种调用方式总是从运行时的实际类开始找方法。
1、派生类构造器在不显式声明调用基类的哪个构造器的时候,会默认调用基类的无参构造器。
2、基类的draw()方法会被派生类的draw()方法Override,因此调用的是派生类的draw(),此时radius未被初始化,因此为0。
之前概念理解错误,抱歉。
额,基类,父类。。回复完了请读一遍啊
【 在 lixing (iluhcm) 的大作中提到: 】
: 1、基类构造器在不显式声明调用父类的哪个构造器的时候,会默认调用父类的无参构造器。
: 2、父类的draw()方法会被基类的draw()方法Override,因此调用的是基类的draw(),此时radius为被初始化,因此为0。
发自〖iBYR-iOS客户端〗
没明白为啥radius=0.
private int radius=1;这句在调用子类draw()方法时不执行么?
【 在 lixing 的大作中提到: 】
: 1、基类构造器在不显式声明调用父类的哪个构造器的时候,会默认调用父类的无参构造器。
: 2、父类的draw()方法会被基类的draw()方法Override,因此调用的是基类的draw(),此时radius为被初始化,因此为0。
调用子类draw()的时候还没有给radius显式赋值,子类的存储空间是一堆0,创建完子类空间后创建父类空间然后构造父类,所以输出的radious也是0。
【 在 kevincol22 的大作中提到: 】
: 没明白为啥radius=0.
: private int radius=1;这句在调用子类draw()方法时不执行么?
【 在 zhoujunfu 的大作中提到: 】
: 额,基类,父类。。回复完了请读一遍啊
: 发自〖iBYR-iOS客户端〗
之前把基类/派生类和父类/子类概念混淆了,不好意思。