我見過相關的問題,但答案只是我尋找的答案的核心。返回的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