我從我的java課程中知道,當我實現一個接口時,我必須構建該接口中存在的所有方法。但是當我看了一下HashSet我觀察到它沒有構建Set接口的所有方法。爲什麼?爲什麼HashSet不會構建Set接口的所有方法
0
A
回答
0
查看超類AbstractSet。來自java文檔:「這個類提供了Set接口的骨架實現,以最小化實現這個接口所需的工作。」 HashSet擴展了AbstractSet,所以在AbstractSet中沒有實現的東西在HashSet中實現。
0
HashSet
實現了Set
接口的所有方法。並非它們全部直接出現在HashSet
代碼中,因爲一些(例如removeAll
)從AbstractSet
繼承,而其他(例如toArray
)從AbstractCollection
繼承。你可以在documentation中看到這一切。
這些抽象類非常有用。如果您擴展AbstractSet
,則您只需覆蓋size
,contains
和iterator
,即可免費獲得正確運行的其他方法的版本(例如,containsAll
,hashCode
,toArray
,stream
)。無論如何,您可以選擇覆蓋它們以提高效率。
3
如果你看一下HashSet
類的聲明,你可以看到,除了實施Set
,Cloneable
和Serializable
,它擴展了AbstractSet
類,它本身延伸AbstractCollection
。
例如,兩個toArray()
過載在AbstractCollection
類中實現。 addAll()
,containsAll()
,retainAll()
和removeAll()
方法也是如此。此外,removeAll()
在AbstractSet
中被覆蓋。
equals()
和hashCode()
方法在Object
中定義,在AbstractSet
中被覆蓋。
希望這有助於...
傑夫
相關問題
- 1. RandomAccess接口,爲什麼沒有方法?
- 2. 爲什麼VolatileImage沒有set/getPixel()方法
- 3. 爲什麼OrderByDescending不會被識別爲構建方法
- 4. 'Set = new HashSet'或'HashSet = new Hashset'?
- 5. 定義'Set set = new HashSet()'時,是否設置了接口或類的實例Set?
- 6. 爲什麼接口不能有靜態成員方法
- 7. 靜態方法不能實現接口方法,爲什麼?
- 8. 爲什麼接口默認方法?
- 9. 拼接方法爲什麼會有這種奇怪的行爲?
- 10. 爲什麼不建議在SQLite的C接口接口sqlite3_get_table
- 11. Set和HashSet Java
- 12. 爲什麼設備和模擬器的構建有所不同?
- 13. 爲什麼ArrayAdapter沒有像arraylist那樣的set方法呢?
- 14. 爲什麼沒有在Set界面上定義的replace()方法?
- 15. 爲什麼[WCF]有接口
- 16. 爲什麼不是方法String.indexOf接口CharSequence的一部分?
- 17. C++ 11已實現的接口方法不可用。爲什麼?
- 18. 爲什麼不能公開一個實現的接口方法?
- 19. 爲什麼Netbeans找不到接口實例的方法?
- 20. 有什麼更好的創建不同的數據結構:HashSet或Linq的Distinct()?
- 21. 爲什麼Java實現Set和ArrayList的不同hashcode方法?
- 22. 爲什麼Typescript中的抽象類實現和接口必須實現接口中的所有方法
- 23. Go結構作爲方法接收器有和沒有接口
- 24. WindowManager.LayoutParams爲什麼會有setTitle方法?
- 25. 接口抽象的所有方法?
- 26. 爲什麼使用方法「grid()」時tkinter窗口不會打開?
- 27. 爲什麼我的gradle構建失敗? (找不到方法apt())
- 28. 爲什麼xcode爲某些方法找到接口但不是其他方法?
- 29. 爲什麼有些接口方法被另一個接口覆蓋?
- 30. 爲什麼我的接口類型對象不會執行未在接口中聲明的方法?
你是什麼意思沒有「建立所有的方法?」 'Set'中定義的每個方法都由'HashSet'實現,或者由它的超類實現。 – resueman
您認爲哪些方法未實現? –
如果沒有實現所有必需的方法,(具體)類將無法編譯。 – ergonaut