[英]Why do we need interfaces in Java?
在 Java 實現多個 inheritance 我們使用接口。 它是接口的唯一用途嗎? 如果是,Java中接口的主要用途是什么? 為什么我們需要Java中的接口?
我想說主要用途是多態,或者能夠在許多不同的對象上執行相同的操作。 如果不同的對象都實現相同的接口並具有相同的方法,則可以將所有這些對象存儲在Vector中,並迭代通過Vector調用每個對象的方法。
我也在考慮如何使用接口。 我希望這會有助於其他人:
接口是類可以做什么的契約(或協議,或共同理解)。 當一個類實現某個接口時,它承諾為接口中聲明的所有抽象方法提供實現。 接口定義了一組常見行為。 這些類實現接口同意這些行為並為行為提供自己的實現。 這允許您在界面上編程,而不是實際的實現。 接口的主要用途之一是提供兩個對象之間的通信協定。 如果您知道一個類實現了一個接口,那么您就知道該類包含該接口中聲明的方法的具體實現,並且您可以保證能夠安全地調用這些方法。 換句話說,兩個對象可以基於接口中定義的契約進行通信,而不是它們的具體實現。
其次,Java不支持多重繼承(而C ++則支持多重繼承)。 多重繼承允許您從多個直接超類派生子類。 如果兩個直接超類具有沖突的實現,則這會產生問題。 (在子類中要遵循哪一個?)。 但是,多重繼承確實有它的位置。 Java通過允許您“實現”多個接口來實現這一點(但您只能從一個超類“擴展”)。 由於接口僅包含抽象方法而沒有實際實現,因此多個接口之間不會產生沖突。 (接口可以保存常量但不建議使用。如果子類實現了兩個具有沖突常量的接口,編譯器將標記出編譯錯誤。)
來自: http : //www.ntu.edu.sg/home/ehchua/programming/java/J3b_OOPInheritancePolymorphism.html#zz-6.6
除了這些響應,我想說接口最重要的用途是減少軟件中組件之間的耦合。
接口允許表示類之間關於如何彼此通信而不與實際實現相關聯的協議。
這允許我們在不改變編譯代碼的情況下替換其他人的實現(對測試或更改用例非常有用)。
您需要它們,以便您可以在層次結構外鍵入對象。
例如,可以比較的對象幾乎可以在對象層次結構的任何位置 - 它們不需要具有可以比較的共同祖先。 String
s時,可以比較, Integer
S能比的,你甚至可以制作自己的Frame
,可以進行比較,S(比方說,一幀是,如果它更在前台比另一架“少” -也就是說,如果它會覆蓋在其他框架)。 因此,如果你想引用一個可以比較的東西,你將被迫用最一般的祖先聲明一個變量 - 在本例中是Object
。 這太籠統了,因為它也可以接收不可比較的值(當你嘗試比較它們時會拋出錯誤)。
因此,接口Comparable
:它選擇跨子類 - 超類層次結構實現比較功能的所有類。
我們需要接口:
沒有它,有些代碼將無法編譯。
例如,在:
for (String name : list)
{
System.out.print("\nIn foreach loop: name: " + name);
}
list
必須實現java.lang.Iterable interface
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.