问题描述
该方法是一个 抽象工厂方法
,它返回一个 子类 的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));
- 据我所知,您不能为抽象类和接口类实例化(换句话说,创建一个对象)。我对么?
- 难道
getInstance()
和newInstancce()
方法创建上面的抽象类的实例?
我是否缺少使用抽象类及其新对象的内容?