构造器内部的多态方法

来源:互联网 发布:.club域名与.com 编辑:程序博客网 时间:2024/06/02 03:59

设计构造器的规则:
用尽可能简单的方法使对象进入就绪状态;如果可能,避免调用任何方法。
例子

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
分析:
初始化的实际过程

  1. 在采取其他任何操作之前,为对象分配的存储空间初始化成二进制零。
  2. 就象前面叙述的那样,调用基础类构建器。此时,被覆盖的draw()方法会得到调用(的确是在RoundGlyph 构建器调用之前),此时会发现radius 的值为0,这是由于步骤1造成的。
  3. 按照原先声明的顺序调用成员初始化代码。
  4. 调用衍生类构建器的主体。
0 0
原创粉丝点击