回複內容:
強調動作用介面,強調類別用抽象。
我也想過這個問題,兩者確實比較像。
使用介面,你是想規定開發人員(包括自己)需要實現一系列特定的類方法。
使用抽象類別,你是想規定開發人員(包括自己)需要實現一系列特定的類方法並且提供一些基本的類方法以供開發人員使用。
另一個區別是:一個類可以實現多個介面,但是只能繼承一個抽象類別。如果你的代碼是要規範一個很細的功能(比如Iterator
什麼的),那就用介面。其他的則可以用介面也可以用抽象類別。
最後,有人建議如果不知道該用介面還是抽象類別,可以做的是定義一個介面然後寫一個實現那個介面的抽象類別。
介面是一種協定,抽象類別則相當於類模板。
使用抽象類別,而不要使用介面來分離協定與實現。
如果需要提供多態階層的實值型別,使用介面。
如果一個類型必須實現多個協定,或者協定適用於多種類型,使用介面。
雖然抽象類別和介面都支援將協定與實現分離開來,但介面不能指定以後版本中的新成員,而抽象類別可以根據需要新增成員以支援更多功能。
優先考慮定義類,而不是介面。
事實抽象類別和介面類,在應用中,有無都不影響程式運行;只是規範作用而已
比如抽象類別:比如定義當前類只能繼承使用,不可直接引用
介面類:最大作用就是起到規範作用。適用底層架構編寫完成後。為了後續的拓展,但又得保證代碼規範,一般會寫介面類,以便後期開發人員規範開發!
根據特點來,如果只是制定規範用介面,裡面只能定義常量和公有抽象方法
抽象類別只是說不能被執行個體化,裡面和普通類一樣什麼都能寫,當然還可以寫抽象方法
抽象用於不同的事物,而介面用於事物的行為
其實抽象類別和介面的區別不是太大,介面裡不能有自己的實現,抽象類別裡面可以有自己的實現,無論是介面還是抽象都是為了實現依賴抽象不要依賴具體實現的原則----**
依賴倒置的原則
**
我自己覺得php裡的介面純屬扯淡
單繼承多介面的情況下,介面是血統的一個關鍵因素,一個介面可以規定一個業務情境。。比如你是一個人,是抽象類別繼承過來的,你需要實現介面比如是某個公司的員工,是程式猿,這種方法類的層級相對較少。也可以某公司員工是一個抽象類別繼承人,然後程式猿繼承某公司員工,這樣。看設計上怎麼做。trait和介面能在第一種模式中提供極大的重用性