![](/img/trans.png)
[英]Reference to an object of any class that implements two or more given interfaces
[英]Is a good practice to a class implements two or more interfaces?
我最近看到了這種方法,我不能不明白這不是一個好習慣。 原因如下:
依賴關系,如果在接口中添加新方法,則其他所有類都必須實現它;
內存使用情況,(我不確定在這里)當實例化此類中的對象時,內存使用情況將比僅具有關聯關系時要高;
我認為某些語言出於某種原因不允許使用這種功能 ,但是對於Java,我對此不太確定。 誰能解釋為什么我們應該在一個類中實現多個接口,或者為什么不應該這樣做?
謝謝!
這里沒有經驗法則,您建議的任何要點都不適用。 實際上,您的第一點沒有意義,而第二點只是一個錯誤的猜測。
如果看一下JDK類,您將很容易地看到一個類實現了多少個(以及哪個)接口的基礎。 例如,許多集合類至少實現Iterable
及其各自的集合接口( List
, Set
, Map
等)。
這是一種設計選擇,盡管沒有什么可以阻止您創建Runnable
List
,但您需要做出明智的選擇才能創建出如此奇特的東西。
提到的接口default
方法是一種機制,它可以在改進現有類的同時保持向后兼容性(Java的重要設計方面)。
因此,查看設計時,計數的不是接口數量。
與實現一個接口相比,實現更多的接口與內存效率無關。
實現一個接口(看看“對接口編程”是什么意思? )是一種本質上避免多重繼承的設計。
如您所引用:
如果在界面中添加新方法,所有其他類都必須實現它
並非所有課程。 僅使用實現接口的類。 這意味着您的對象需要具有共同的行為集,並根據其各自的需求來實現。
但是,在某些情況下,您不需要每個類都需要實現已實現接口所需的方法。 這在Java 8中已得到克服,在Java 8中,您具有提供默認實現的Default Methods 。
回應您的第一點:在JDK 8中,您可以將接口方法聲明為default
方法,並在該接口內提供實現,這樣,所有實現類都不必實現新方法(不過,如果願意,它們可以覆蓋) 。
某些語言允許一個類的多個超類,但Java不允許。 因此,由於此限制,Java允許多個接口。
首先,您說過“如果在接口中添加新方法,所有其他類都必須實現它”。
因此,如果您不想那樣寫,可以使用抽象類。 我認為這不是界面問題。 那是關於設計模式。 您應該了解它。 如果您非常了解OOP概念,則多接口實現會非常好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.