gpt4 book ai didi

java - 为什么允许抽象类 "DocumentBuilderFactory"实例化新实例

转载 作者:搜寻专家 更新时间:2023-10-31 08:17:20 26 4
gpt4 key购买 nike

最近,我一直在研究 XML 解析器。这对我来说才刚刚开始,我设法理解了如何在 Java 中使用 DOM 解析器类,即 DocumentBuilderFactoryDocumentBuilder 来解析 XML 文档。

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

我想问自己的是,为什么允许抽象类(例如 DocumentBuilderFactoryDocumentBuilder)实例化新实例?然后在另一个例子中我看到:

Calendar calendar = Calendar.getInstance();  
System.out.println(calendar.get(Calendar.DATE));
  1. 据我所知,您不能为抽象类和接口(interface)类实例化(换句话说,创建对象)。我说得对吗?
  2. getInstance()newInstancce() 方法是否创建上述抽象类的实例?

我是否遗漏了有关使用抽象类及其新对象的一些信息?

最佳答案

该方法是一个 abstract factory method ,它返回 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();

不幸的名称选择肯定会引起混淆。

关于java - 为什么允许抽象类 "DocumentBuilderFactory"实例化新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16494693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com