2012-12-27 47 views
1

可能重複:
Java.util.HashMap — why HashMap extends AbstractMap and implement Map?
Why would both a parent and child class implement the same interface?Java:WeakHashMap爲什麼實現Map,而AbstractMap已經實現了它?

WeakHashMap中< K,V>聲明既延長AbstractMap < K,V>和實施地圖<ķ ,V>

AbstractMap < K,V>已經實現地圖< K,V>。它看起來像implements聲明是多餘的。

它被宣佈的原因是什麼?

+4

文件冗餘。 –

+1

請參閱:http://stackoverflow.com/questions/5668429/why-would-both-a-parent-and-child-class-implement-the-same-interface – AFS

+0

您是否在文檔中或在實現本身? – fge

回答

3

除非某人能夠指出由JDK中WeakHashMap的作者在某處在線發佈的原因,否則我們只能推測。推測是它改進了自動生成的文檔。它對這個類暴露的接口或你如何使用它沒有任何影響。

+0

爲一個類生成的javadoc依賴於所使用的doclet類,它碰巧默認的doclet爲接口「深度」查詢,所以不管你是否省略冗餘接口都沒關係:它們會在javadoc中顯示。 – fge

+0

@fge:我不是disagreein'。 :-)我想相信Sun的工程師(就像這樣)是有原因的。我沒有,但我想...... –

2

雖然它確實是多餘的,但它確保瞭如果從父節點刪除接口實現,子節點仍然保持Map接口併產生必要的編譯錯誤。

+0

如果你重新設計了它,並且新的基地沒有實現'Map ',**和**你沒有添加'implements'和必要的管道,這將是一個非常令人震驚的編輯。 :-) –

1

這「看起來」像一個俯瞰。如果擴展一個類,則會自動實現由基類實現的所有接口(不管該基類是否爲abstract)。因此,考慮到:

public interface I {} 

public class A implements I {} 

,並聲明:

public class B extends A {} 

上面的聲明是完全等同於

public class B extends A implements I {} 

的忽略確實如此。好看點;)

相關問題