您的位置:首页 > 其它

构造器内部的多态方法

2016-10-28 21:17 169 查看
设计构造器的规则:

用尽可能简单的方法使对象进入就绪状态;如果可能,避免调用任何方法。

例子

abstract class Glyph {
abstract void draw();

Glyph() {
System.out.println("Glyph() before draw()");
draw();
System.out.println("Glyph() after draw()");
}
}

class RoundGlyph extends Glyph {

int radius = 1;

RoundGlyph(int r) {
radius = r;
System.out.println("RoundGlyph.RoundGlyph(), radius = " + radius);
}

void draw() {
System.out.println("RoundGlyph.draw(), radius = " + radius);
}

}

public class PolyConstructors {
public static void main(String[] args) {
new RoundGlyph(5);
}
}


输出:

Glyph() before draw()

RoundGlyph.draw(), radius = 0

Glyph() after draw()

RoundGlyph.RoundGlyph(), radius = 5

分析:

初始化的实际过程

在采取其他任何操作之前,为对象分配的存储空间初始化成二进制零。

就象前面叙述的那样,调用基础类构建器。此时,被覆盖的draw()方法会得到调用(的确是在RoundGlyph 构建器调用之前),此时会发现radius 的值为0,这是由于步骤1造成的。

按照原先声明的顺序调用成员初始化代码。

调用衍生类构建器的主体。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息