java是面向對象的語言。在面向對象的概念中,一切事物都是對象,所有的對象都是用類來描述的。事物有個性和共性。描述事物抽取出來的共性的類就是抽象類。
事物(對象) | 事物的個性 | 事物的共性 |
---|---|---|
類(屬性+方法) | 一般類 | 抽象類 |
舉例 | 蘋果 | 水果 |
在Java語言中, 抽象類和接口是支持抽象定義的兩種機制。正是由于這兩種機制的存在,才賦予了Java強大的 面向對象能力。抽象類和接口之間在對于抽象定義的支持方面具有很大的相似性,甚至可以相互替換。
1.語法層次的不同 參考一,二部分。
2.抽象層次的區別 抽象類是對一類事物的抽象。接口是對行為的抽象。 抽象類是對整個類整體的屬性,行為進行抽象。 接口是對類局部行為進行抽象。 舉例說明: 飛機和鳥是不同的事物,它們擁有共同的行為,會飛。 可以將飛機設計一個類,鳥設計一個類,因為兩者都是事物。 但是飛行是個行為特性,不能設計一個類,應該設計成一個接口。
3.描述層次的區別 我們日常生活中可以看到各種”接口”,例如電源插座。制造電源插座的廠商和制造電器的廠兩者之間約定了一個生產規則,約定了一個”接口”之后,不同的電器就都能使用電源插座。 由此可知,接口的本質是協議,是對事物之間規則的描述,不是對事物的描述。 在Java中: 1.抽象類也是類,類是對現實事物的描述。 2.接口不是類,接口是用來建立類與類之間的協議。接口是對事物之間規則,行為的描述。
4.設計層次的不同 1.抽象類的設計理念是“is-a”,接口的設計理念是“like-a”,是問題領域不同。 2.抽象類的設計目的是為了提高代碼的復用性。是模板式設計。接口的設計目的是為了實現”設計與實現的分離”,降低程序中的耦合性。是輻射式設計。 3.在“缺省適配模式”中,聲明類型的工作由Java接口承擔。但是同時給出一個Java抽象類,且實現了這個接口。而其他同屬于這個抽象類型的具體類可以選擇實現這個Java接口,也可以選擇繼承這個抽象類。也就是說,在層次結構中,Java接口在最上面,然后緊跟著抽象類,然后是普通類。 4.在面向對象程序設計中,對于接口,有一個核心原則就是Interface Segregation Principle(接口隔離原則): 1)使用多個專門的接口比使用單一的總接口要好。2) 一個類對另外一個類的依賴性應當是建立在最小的接口上的。3)一個接口代表一個角色,不應當將不同的角色都交給一個接口。沒有關系的接口合并在一起,形成一個臃腫的大接口,這是對角色和接口的污染。
簡化總結
抽象類 | 接口 |
---|---|
類 | 不是類 |
對事物描述 | 對事物之間規則描述 |
對類整體抽象 | 對類局部行為抽象 |
模板式設計 | 輻射式設計 |
is-a理念 | like-a理念 |
目的是提高復用性 | 目的是降低耦合性 |
為繼承而生 | 為多態而生 |
新聞熱點
疑難解答