3 回答

TA貢獻1995條經驗 獲得超2個贊
當您只想聲明類必須具有哪些方法和成員時,使用接口。任何實現該接口的人都必須聲明并實現該接口列出的方法。
如果您還想要一個默認實現,請使用抽象類。擴展抽象類的任何類都必須只實現其抽象方法和成員,并且將具有抽象類的其他方法的一些默認實現,您可以覆蓋或不覆蓋它們。
--EDIT - 忘了提,Earwicker提醒我
最后,您可以根據需要實現任意數量的接口,但只能擴展一個類(無論是抽象的還是抽象的)。在選擇之前請記住這一點。

TA貢獻1856條經驗 獲得超17個贊
關鍵的區別在于,您可以implement
在一個類中使用多個接口,但只能extend
使用一個抽象類。這是因為抽象類還可以定義存儲數據的字段,而接口則不能。

TA貢獻1868條經驗 獲得超4個贊
抽象類是一個類,它至少有一個抽象方法,或者你也可以將所有方法都作為抽象方法。顯然它無法實例化。您必須從一個抽象類繼承并在繼承類中實現抽象方法(即擴展抽象類的類)。
接口根本不是類(因此不要將它們稱為接口類)。接口定義方法的簽名而無需任何實現。接口也沒有成員字段。如果在類中實現接口,則必須為接口提供的所有方法提供實現。
為某些東西定義一個通用API是有意義的,它可以有完全不同的實現。抽象類對于主要相同的類更有用,但有一些細微的差別。您可以將兩種方法結合起來
一個很好的例子是Java類庫的集合框架。您有接口List,它定義了Lists的行為方式。一些實現例如是ArrayList和LinkedList。因為它們的行為相似,所以兩者都相同的東西在抽象類AbstactList中實現,都繼承了它。
添加回答
舉報