RoundGlyph 继承了Glyph,但没有覆盖Glyph的构造方法,也就是说,
RoundGlyph还有一个默认的,但不是显性的构造方法:RoundGlyph(){
  System.out.println("Glyph() before draw()");
  draw();
  System.out.println("Glyph() after draw()");
}

解决方案 »

  1.   

    虽然Glyph是abstract,但Glyph()没有声明为abstract,是可以直接调用的。
      

  2.   

    “RoundGlyph继承了Glyph,但没有覆盖Glyph的构造方法”
    RoundGlyph()和他的基类构造式Glyph() 名字根本不同,
    构造方法怎么覆盖?按照正常的继承顺序,在呼叫derived class
    RoundGlyph的构造方法之前,会先对base class Glyph初始化,
    呼叫其构建式。可是我的疑问是作为abstract class 的Glyph在这个例子
    中实际上是产生了一个object!"虽然Glyph是abstract,但Glyph()没有声明为abstract,是可以直接调用的"
    abstract class Glyph {
    abstract void draw();
    Glyph() {
    System.out.println("test");
    }
    }
    public class PolyConstructors {
    public static void main(String[] args) {
    new Glyph();  //error!
    }

    abstract class是没有办法实例化的,就算是你的构造方法不是abstract