我见过相关的问题,但答案只是我寻找的答案的核心。返回的Java方法接口类型
我有下面的代码行(和它编译和运行没有错误):
Document doc = dbuilder.parse(myXmlFile);
其中 文献是接口org.w3c.dom.Document
和 parse()
是从javax.xml.parsers.DocumentBuilder
的方法当我执行时
System.out.println(doc.getClass().getName());
其输出是
com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl
其中,我假定,意味着DeferredDocumentImpl
实现Document
接口,并且当我执行针对我的doc变量的方法,我实际执行DeferredDocumentImpl的方法。
我的问题是:
是,以上假设是正确的,那就是,我是不是真的执行该
DeferredDocumentImpl
类实现的方法?一个接口可以通过任意数量的类实现,并假设
org.w3c.dom.Document
确实是由多个班级,为什么Document
类型由parse()
返回得到铸造为DeferredDocumentImpl
类来实现,而不是其他类的一个实施Document
?假设2.上面是某种'默认'或'优先'类型分配,我该在哪里验证 - 并可能改变 - 该分配?
我该如何重写我在3中描述的类型赋值,在代码本身的级别上面?
正如我所说,我已经为此尽职尽责,但似乎没有任何答案给我这些具体问题的答案......非常感谢。
3.对我来说似乎有点奇怪,关于它没有任何'默认'或'优先',库实现者只是简单地创建了一个实现了'Document'的类,因为这是他们想要提供的'契约',并且然后实例化该类(la'new DeferredDocumentImpl(...)')作为'parse'的结果返回。 –
Thx用于响应。所以问题的精神在于:如果库中的多个类(比如A类除外)实现Document接口,并执行相同的parse(),会发生什么?当我调用doc.getClass()时,我假设我只会返回A或B(因为一个对象只能是一个类类型)。它会是哪一个?如何设置它以及在哪里设置,如果我只激发一个返回一个Document引用的parse(),它将成为A或B类型的对象?是默认的?,优先?这就是我的意思。任何洞察赞赏。 – Andy