Java构造器内部多态方法这个坑

来源:互联网 发布:尤克里里谱子软件 编辑:程序博客网 时间:2024/06/05 02:06

直接上代码,这个结果输出的很有意思,调用继承者的方法,可是值却为0!!

Java构造器内部多态方法这个坑运行结果:

Java构造器内部多态方法这个坑

原因如下:

Glyph.draw()方法设计为了将要被覆盖,这种覆盖是在RoundGlyph中发生的。但是Glyph构造器会调用这个方法,结果导致了对RoundGlyph.draw()的调用,这看起来似乎是我们的目的。但是如果看到输出结果,我们会发现当Glyph的构造器调用draw()方法时,radius不是默认初始值1,而是0。这可能导致一个错误,或者什么东西都没有,我们只能干瞪眼!

真正初始化的过程如下:

1)在其他任何事物发生之前,将分配给对象的储存空间初始化成二进制的零。

2)调用被覆盖的draw()方法(要在调用RoundGlyph构造器之前调用),由于步骤1的缘故,我们此时发现radius的值为0。

3)按照声明的顺序调用成员的初始化方法。

4)调用导出类的构造器主体。

本文为头条号作者发布,不代表今日头条立场。

0 0
原创粉丝点击