設計思想不同,使用動機不同.
抽象類和介面設計的時候,設計思想不同. 設計抽象類是自下而上的過程,因為呼叫者子類需要某些屬性和特有行為,所以呼叫者繼承抽象類 設計介面是自上而下的過程,介面規範某一行為,我某類需要這個行為,呼叫者實現某介面
開發者使用的時候,使用動機不同. 開發者繼承抽象類是為了使用抽象類的屬性和行為; 開發者實現介面只是為了使用介面的行為.
區別總結:
區別一: 抽象類只能單繼承,介面能多實現
區別二: 抽象類是一個類,可以被任意許可權修飾符修飾,靜態和非靜態屬性,final和非final屬性,可以有抽象方法和非抽象方法;
介面只能被public,final修飾,只能有靜態方法,即使沒有顯示的宣告,而且是不可修改的;
區別三: 抽象的事物不同: 抽象類是對類的抽象,介面是對行為的抽象; 抽象類是對整個類抽象,包括屬性,行為; 介面是對類的行為(區域性)進行抽象;
區別四: 定義的時候,定義抽象類和介面的思想不同; 設計抽象類是自下而上的過程,我子類需要,所以我定義抽象類; 設計介面是自上而下的過程,我介面規範某一行為,我某類需要這個行為,我實現某介面;
核心區別:
呼叫者使用動機不同,實現介面是為了使用他規範的某一個行為;
繼承抽象類是為了使用這個類屬性和行為.
再簡單點說:
我們知道抽象類是從子類中發現公共部分,然後泛化成抽象類,子類繼承該父類即可,但是介面不同。實現它的子類可以不存在任何關係,共同之處。例如貓、狗可以抽象成一個動物類抽象類,具備叫的方法。鳥、飛機可以實現飛Fly介面,具備飛的行為,這裡我們總不能將鳥、飛機共用一個父類吧!所以說抽象類所體現的是一種繼承關係,要想使得繼承關係合理,父類和派生類之間必須存在"is-a" 關係,即父類和派生類在概念本質上應該是相同的。對於介面則不然,並不要求介面的實現者和介面定義在概念本質上是一致的, 僅僅是實現了介面定義的規則而已。
設計思想不同,使用動機不同.
抽象類和介面設計的時候,設計思想不同. 設計抽象類是自下而上的過程,因為呼叫者子類需要某些屬性和特有行為,所以呼叫者繼承抽象類 設計介面是自上而下的過程,介面規範某一行為,我某類需要這個行為,呼叫者實現某介面
開發者使用的時候,使用動機不同. 開發者繼承抽象類是為了使用抽象類的屬性和行為; 開發者實現介面只是為了使用介面的行為.
區別總結:
區別一: 抽象類只能單繼承,介面能多實現
區別二: 抽象類是一個類,可以被任意許可權修飾符修飾,靜態和非靜態屬性,final和非final屬性,可以有抽象方法和非抽象方法;
介面只能被public,final修飾,只能有靜態方法,即使沒有顯示的宣告,而且是不可修改的;
區別三: 抽象的事物不同: 抽象類是對類的抽象,介面是對行為的抽象; 抽象類是對整個類抽象,包括屬性,行為; 介面是對類的行為(區域性)進行抽象;
區別四: 定義的時候,定義抽象類和介面的思想不同; 設計抽象類是自下而上的過程,我子類需要,所以我定義抽象類; 設計介面是自上而下的過程,我介面規範某一行為,我某類需要這個行為,我實現某介面;
核心區別:
呼叫者使用動機不同,實現介面是為了使用他規範的某一個行為;
繼承抽象類是為了使用這個類屬性和行為.
再簡單點說:
我們知道抽象類是從子類中發現公共部分,然後泛化成抽象類,子類繼承該父類即可,但是介面不同。實現它的子類可以不存在任何關係,共同之處。例如貓、狗可以抽象成一個動物類抽象類,具備叫的方法。鳥、飛機可以實現飛Fly介面,具備飛的行為,這裡我們總不能將鳥、飛機共用一個父類吧!所以說抽象類所體現的是一種繼承關係,要想使得繼承關係合理,父類和派生類之間必須存在"is-a" 關係,即父類和派生類在概念本質上應該是相同的。對於介面則不然,並不要求介面的實現者和介面定義在概念本質上是一致的, 僅僅是實現了介面定義的規則而已。