原因是因为在Glyph构造时radius还没有被符值,所以显示的int的默认值。Java构造的顺序是先构造函数,后成员变量。

解决方案 »

  1.   

    楼上说得没错^_^
    也可以这样说:先是因为new RoundGlyph(5)要产生一个实例
                  又因为class RoundGlyph extends Glyph
                  因此要先构造Glyph类,即调用他的构造函数:
                  Glyph() {
                     System.out.println("Glyph() before draw()");
                     draw();
                     System.out.println("Glyph() after draw()");
                  }
                  而在子类里又重写了draw()方法,因此就调用了子类里实现的draw方法
                  而在这个时候还没有初始化radius,所以得到了这样的结果。
    希望说得清楚^_^
    不对的地方还请指教
      

  2.   

    bighappy(简单) 说的不对,应该是先初始成员变量 再执行构造函数!
      

  3.   

    大概是extends 的原因吧
    先要构造Glyph的构造函数,而这时RoundGlyph 的初始成员变量还没有构造出来吧!!
    此时执行draw()函数才得到RoundGlyph.draw(), radius = 0吧