当前位置: 首页 > 面试题库 >

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

空枫涟
2023-03-14
问题内容

最近,我一直在使用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()方法创建上面的抽象类的实例?

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


问题答案:

该方法是一个 抽象工厂方法
,它返回一个 子类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();

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



 类似资料:
  • 问题内容: 我创建了一个空的抽象类,并从中继承了该类: 我期望输出是 但是,我得到的是 如果我删除(这样就变成一个普通的类)和/或如果我设置了其他值,问题(显然)就消失了。 这里发生了什么? 问题答案: 这实际上不是ABC的问题,而是PyMongo的问题。有一个关于它的问题在这里。似乎pymongo重写以返回某种数据库类。这意味着将返回一个数据库对象,该对象在布尔上下文中为true。这使ABCMe

  • 我查过了,发现最接近的是这个,除了我没有任何向前的声明。我在基类中只有一个纯虚函数,我在子类中实现它,如下所示: 命令H 命令cpp 数字H 数字cpp 发生文件错误: 一个dd.cpp 添加H

  • 我正在学习OOP的概念。在阅读继承的过程中,我了解到在初始化子类之前必须先初始化超类,即所有超类的构造函数必须在子类构造函数之前运行。此外,我们还可以直接创建超级类的实例。对于例如。 现在,我遇到了抽象类。看来我们不能实例化一个抽象类。要使用抽象类,您必须从另一个类继承它,并为其中的抽象方法提供实现。 我的问题是,在实例化具体子类的同时,抽象超类的构造函数会在具体子类的构造函数之前被调用。如果是这

  • 问题内容: 我已经开始学习用于Android应用程序开发的Java语言。 根据我对静态类的理解,我们无法实例化静态类的对象。 但是,为什么在随后的情况下允许实例化静态嵌套类对象? 如果将内部类的对象标记为静态,为什么我们可以创建它呢? 问题答案: 根据我对静态类的理解,我们无法实例化静态类的对象。 您对“静态类”的含义的理解不正确。基本上, Java中 的“静态类” 是嵌套类,它没有对包含类的实例

  • 问题内容: 最近,在一次采访中,有人问我一个非常笼统的问题:“ java中的抽象是什么”。我给出了定义,接着是关于抽象的其他问题,即什么是抽象方法以及抽象方法与具体方法之间的区别等。最后面试官要求我提供一个实时示例,说明我应该使用或将类定义为抽象类。我感到困惑。我给出了一些示例,但他没有被说服。 我用谷歌搜索,但没有找到真正的解决方案。 因此有人可以给我实时示例,即当他/她的项目中将类定义为抽象时

  • 但是为什么在下面的情景中允许静态嵌套类对象的实例化呢? 为什么我们可以创建内部类的对象,如果它被标记为静态的?