抽象类“ DocumentBuilderFactory”如何允许实例化新实例

问题描述

方法一个 抽象工厂方法 ,它返回一个 子类DocumentBuilder,它是一种(混凝土)执行。

知道对象的确切类别并不重要,您只需要知道它是一个即可DocumentBuilder。该方法可以返回在运行时决定的实例,或者在其认为合适时预定的实例。

如果您想知道,可以打印出实际的类,如下所示:

 System.out.println(dbf.getClass());

请注意,该方法newInstance()不要与的相同名称方法混淆Class,即,这两者是不同的:

 // a static method of this class
 DocumentBuilderFactory.newInstance();

// an instance method of Class
 DocumentBuilderFactory.class.newInstance();

不幸的名字选择肯定会引起混乱。

解决方法

最近,我一直在使用XML解析器。这对我来说仅仅是个开始,我设法了解了如何在Java即使用DOM解析器类,DocumentBuilderFactory以及DocumentBuilder如何解析XML文档。

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
DocumentBuilder db = dbf.newDocumentBuilder();

我想问自己的是如何允许抽象类(例如DocumentBuilderFactory和)DocumentBuilder实例化新实例?然后在另一个示例中,我看到:

Calendar calendar = Calendar.getInstance();  
System.out.println(calendar.get(Calendar.DATE));
  1. 据我所知,您不能为抽象类和接口类实例化(换句话说,创建一个对象)。我对么?
  2. 难道getInstance()newInstancce()方法创建上面的抽象类的实例?

我是否缺少使用抽象类及其新对象的内容?