public abstract class DocumentBuilder {
          //..... 
   public Document parse(File f) throws SAXException, IOException {
        if (f == null) {
            throw new IllegalArgumentException("File cannot be null");
        }        String uri = "file:" + f.getAbsolutePath();
        if (File.separatorChar == '\\') {
            uri = uri.replace('\\', '/');
        }
        InputSource in = new InputSource(uri);
        return parse(in);
    }
         //.....
    public abstract Document parse(InputSource is)
        throws  SAXException, IOException;
}请问此处为何可以调用抽象函数?

解决方案 »

  1.   

    我的见解:
        楼主你的那个parse(in) 不是抽象的,而是调用 parse(File f)这个类方法它并不是抽象的,
         public abstract Document parse(InputSource is)的确是抽象的,但它重载了parse(File  f),所以可以调用
      

  2.   

    有一种设计模式叫工厂模式(not抽象工厂、简单静态工厂)、模板方法模式LZ可以去瞧瞧
      

  3.   

    factory method 模式。
    由继承类实现 parse(InputSource is) 方法。
    java.util.AbstractCollection 也是这么干的。
      

  4.   


    看parse(in)的参数是InputSource,调用的难道不是public abstract Document parse(InputSource is)?实在不太明白,还请细细道明!谢谢