MKo*_*Kod 5 java oop abstract-class instantiation
最近,我一直在使用XML解析器.这只是我的开始,我设法了解如何在java中使用DOM解析器类,DocumentBuilderFactory并DocumentBuilder解析XML文档.
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Run Code Online (Sandbox Code Playgroud)
我问自己是怎么一个抽象类,如DocumentBuilderFactory和DocumentBuilder,被允许实例化新实例?然后在另一个例子中我看到:
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.get(Calendar.DATE));
Run Code Online (Sandbox Code Playgroud)
getInstance()和newInstancce()方法是否创建了上述抽象类的实例?我是否遗漏了使用抽象类及其新对象的内容?
该方法是一个抽象工厂方法,它返回一个子类的DocumentBuilder,它是一种(混凝土)执行.
对象的确切类别并不重要,您只需要知道它是一个DocumentBuilder.该方法可以返回在运行时决定的实例,或者在其认为合适时预先确定的实例.
如果你很想知道,你可以打印出这样的实际课程:
System.out.println(dbf.getClass());
Run Code Online (Sandbox Code Playgroud)
请注意,newInstance()不要将该方法与同名方法混淆Class,即这两种方法不同:
// a static method of this class
DocumentBuilderFactory.newInstance();
// an instance method of Class
DocumentBuilderFactory.class.newInstance();
Run Code Online (Sandbox Code Playgroud)
一个不幸的名字选择肯定会造成混乱.