回答
extends
被用於任一延伸的基類:
class ClassX extends ClassY {
...
}
或延伸的接口:
interface InterfaceA extends InterfaceB {
...
}
注意,接口不能實現其他接口(最可能是因爲他們沒有實現)。
Java不強加的類對接口的任何命名約定(對比IFoo
在.NET世界的接口),而是使用extends
和implements
之間的差異來表示的差異程序員:
class ClassA extends ClassB implements InterfaceC, InterfaceD {
...
}
在這裏你可以清楚地看到你正在建立在ClassB
現有的實現和實現方法從兩個接口。
extends關鍵字用於擴展具體/抽象類。通過擴展,你可以覆蓋父類的方法/繼承它們。一個類只能擴展類。 U也可以說interface1擴展了intenface2。
implements關鍵字用於實現接口。在這種情況下,你必須定義接口中指定的所有方法。一個類只能實現接口。
是用途的問題。接口可以用作與你的應用程序的契約,然後可以使用基類來擴展該接口,所以它是鬆散耦合的。例如注射依賴性模式
採取:
你先寫一份合同:
public interface IProductRepository
{
IList<T> GetAllProducts();
}
然後你你的合同有一個基類擴展:
public abstract BaseProductRepository : IProductRepository
{
public IList<T> GetAllProducts()
{ //Implementation }
}
現在你可以選擇將基礎擴展到兩個或更多具體類別:
public class InternetProductRepository extends BaseProductRepository;
public class StoreProductRepository extends BaseProductRepository;
我希望這個小例子能夠清除擴展和實現之間的差異。對不起,我沒有使用java的例子,但都是面向對象的,所以我認爲你會明白的。
感謝您的閱讀,地理
我沒有完成注射依賴性模式的代碼,但這個想法是存在的,也是有據可查的網。如果您有任何問題,請告訴我。
就像你說的。 java關鍵字implement
用於實現使用extends
擴展類的接口。
這取決於你想要做什麼。通常,當你想強制執行時(例如合同),你會使用一個接口。類似於abstract
類(但是抽象類可以有非抽象方法)。
在java中記住,只能擴展一個類併爲實現類實現零到許多接口。與C#不同的是,您可以使用:
擴展多個類,並且C#僅將:
符號用於接口和類。
實際上,您可以擴展一個接口 - 在您定義另一個接口的情況下。
關於這個問題有很多類似宗教的爭論,我懷疑是否有明確的正確答案,但是對於我認爲值得承擔的事情。使用子類(即extends
),當你的各種類提供相同類型的功能,並有一些共同的實現細節。使用接口實現,以表示您的類提供某些特定的功能(如接口指定的)。
請注意,兩者並不相互排斥;事實上,如果一個超類實現了一個接口,那麼任何子類都將被視爲實現該接口。
在Java中沒有多重繼承,所以一個(子)類只能有一個父類,並且仔細考慮子類以便選擇適當的父類(如果有的話);如果有其他明智的父母班級,選擇一個只反映少量班級能力的家長很可能會以挫敗感告終。舉例來說,擁有SQL Server和Oracle子類的AbstractSQLExecutor
具有很大意義;但是在一個FileUtils父類中使用了一些實用方法,然後爲了繼承該功能而繼承子類,這是一個壞主意(在這種情況下,您應該聲明輔助方法是靜態的,或者持有對相反,FileUtils實例)。
此外,子類化將您與實現細節(您的父項)聯繫起來比實現接口更多。我會說,通常最好是僅僅實現接口,至少在初始階段,並且只在具有明確的層次結構的相同或類似的包中形成類的層次結構。
- 1. 何時使用抽象類和何時使用接口
- 2. 使用擴展通用類的接口
- 3. 使用通用接口擴展非通用接口
- 4. 使用新模型擴展接口
- 5. 使用插件擴展WCF接口
- 6. 的instanceof擴展接口使用PHPUnit
- 7. 如何擴展擴展類的接口
- 8. 「使用擴展方法編程接口」:它何時變得太過分?
- 9. 使用AR-擴展進口:
- 10. 什麼時候使用擴展/抽象和實現/在PHP接口
- 11. 何時使用抽象類或接口?
- 12. 通用接口擴展?
- 13. 如何使用時間擴展從Netlogo導出時間序列
- 14. 擴展和實現接口
- 15. 擴展方法和接口
- 16. 使用泛型和擴展方法的IDescription接口
- 17. 如何使用和擴展Mule-EL?
- 18. 如何使用SQLite擴展
- 19. 如何使用無擴展
- 20. 如何在視口平移時使div擴展?
- 21. 使用擴展ASCII值時的問題
- 22. 擴展時使用父類的方法
- 23. 擴展Mercurial時使用--quiet標籤
- 24. 按鈕獲取擴展時使用flexbox
- 25. 如何在使用Web視圖時啓用Safari擴展
- 26. 如何選擇使用Selenium時啓用的Chrome擴展程序
- 27. 何時使用擴展了RuntimeException的用戶定義類?
- 28. 何時使用關聯擴展與命名作用域?
- 29. 使用擴展運算符在使用映射時擴展數組
- 30. 使用PPX和擴展點
一個接口可以擴展一個接口 – 2009-10-05 08:12:20