[英]Methods That Return an Object of an Interface Type
像我這樣的所有初學者,總是很困惑地看到方法返回接口類型的對象,因為接口具有抽象方法,因此無法實例化。
我終於想出了一種方法來理解這一點:
(((當我們說一個方法返回一個接口類型的對象時,我們實際上是在隱式地說,該方法實際上返回了實現該接口的某個類的對象/實例,但是在大多數情況下,該類是未知的,因為在該方法的實現中聲明為匿名。因此,我們將返回的對象稱為該接口類型。))。
這個解釋正確嗎?
“……當我們說某個方法返回接口類型的對象時,我們實際上是在隱式地說該方法實際上返回實現該接口的某個類的對象/實例……”-正確,但是我們在明確地說。
正如@Jon Skeet所指出的,定義的第二部分是非常不正確的。 在實現中應用匿名類是一個非常具體的情況。 通常,返回接口會給您更多自由:
ArrayList
,則重寫的方法還必須返回ArrayList
或其子類。 經驗法則如下。 如果具體類實現接口,則返回具體類對象(例如ArrayList
)沒有好處,返回接口List
, Collection
。 這將增強代碼的可維護性,即將來將更易於更改代碼。
這是我本月底的生日,所以我為我的所有朋友和家人添加了一種新方法:
public Present givePresent{
//code to select an appropriate and sufficiently expensive present
return present;
}
我可以在這里做兩件事。 我可以編寫一個Present
類,並確保所有可能的禮物都對其進行擴展。 但是我們這里可能會遇到各種各樣的問題:例如BatmanComic
已經從ComicBook
繼承ComicBook
了,因此我們必須不斷往前走,直到Present
與Object
基本上沒有區別。 另一種方法是查看此處實際發生的情況。 我希望收到適合特定類別的內容,簡而言之,Java有兩種方法可以做到這一點。 繼承和接口。 將Present
創建為接口與將其創建為抽象超類的目的完全相同,但是避免了多重繼承的所有問題。 這樣,我要做的就是編寫一個接口:
public interface Present{
}
並確保所有襪子和書本以及其他能夠實現的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.