簡體   English   中英

返回接口類型的對象的方法

[英]Methods That Return an Object of an Interface Type

像我這樣的所有初學者,總是很困惑地看到方法返回接口類型的對象,因為接口具有抽象方法,因此無法實例化。

我終於想出了一種方法來理解這一點:

(((當我們說一個方法返回一個接口類型的對象時,我們實際上是在隱式地說,該方法實際上返回了實現該接口的某個類的對象/實例,但是在大多數情況下,該類是未知的,因為在該方法的實現中聲明為匿名。因此,我們將返回的對象稱為該接口類型。))。

這個解釋正確嗎?

“……當我們說某個方法返回接口類型的對象時,我們實際上是在隱式地說該方法實際上返回實現該接口的某個類的對象/實例……”-正確,但是我們在明確地說。

正如@Jon Skeet所指出的,定義的第二部分是非常不正確的。 在實現中應用匿名類是一個非常具體的情況。 通常,返回接口會給您更多自由:

  • 可以更改方法的實現,以返回實現相同接口的另一個對象, 而無需更改使用此方法的代碼
  • 您可以擴展類來覆蓋該方法,以便它返回實現相同接口的另一個對象。 在這里,您實際上可以更改返回類型。 如果基類的方法返回了具體類,例如ArrayList ,則重寫的方法還必須返回ArrayList或其子類。

經驗法則如下。 如果具體類實現接口,則返回具體類對象(例如ArrayList )沒有好處,返回接口ListCollection 這將增強代碼的可維護性,即將來將更易於更改代碼。

這是我本月底的生日,所以我為我的所有朋友和家人添加了一種新方法:

public Present givePresent{
    //code to select an appropriate and sufficiently expensive present
    return present;
}

我可以在這里做兩件事。 我可以編寫一個Present類,並確保所有可能的禮物都對其進行擴展。 但是我們這里可能會遇到各種各樣的問題:例如BatmanComic已經從ComicBook繼承ComicBook了,因此我們必須不斷往前走,直到PresentObject基本上沒有區別。 另一種方法是查看此處實際發生的情況。 我希望收到適合特定類別的內容,簡而言之,Java有兩種方法可以做到這一點。 繼承和接口。 Present創建為接口與將其創建為抽象超類的目的完全相同,但是避免了多重繼承的所有問題。 這樣,我要做的就是編寫一個接口:

public interface Present{
}

並確保所有襪子和書本以及其他能夠實現的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM