1. 程式人生 > >JAVA程式設計思想學習筆記(八)介面

JAVA程式設計思想學習筆記(八)介面

介面

抽象類和抽象方法

抽象方法:這種方法不完整,僅有宣告而沒有方法體。所採用的語法如下:

abstract void f();

抽象類:包含抽象方法的類叫做抽象類,如果一個類包含一個或多個抽象方法,該類必須被限定為抽象的。

介面

關鍵字:interface
介面定義了一個完全的抽象類,它根本就沒有提供任何具體的實現。它允許建立者確定方法名、引數列表和返回型別,但是沒有任何方法體。介面只提供形式,而未提供任何具體實現。
要建立介面,要用interface代替class關鍵字。
當要實現一個介面時,在介面中定義的方法必須被定義為public的,否則,它只能得到預設的包訪問許可權。

java中的多重繼承

在這裡插入圖片描述
當將一個具體類和多個介面組合在一起的時候,這個具體類必須放在前面,後面跟著的才是介面。
通過繼承,可以很容易的在介面中新增新的方法宣告,還可以通過接觸在介面中組合數個介面。
你放入介面中的任何域都自動是static和final的,所以介面就成為了一種很便捷的用來建立常量的工具。
介面可以巢狀在類或其他介面中。巢狀介面也可以是private型別,實現private介面只是一種方式,它可以強制該介面中的方法定義不要新增任何型別資訊。(也就是說不許向上轉型)
注:
介面的很多應用都和設計模式有關,這裡就不多介紹,直接在設計模式中再做詳細說明。另外,覺得最後總結,作者說的很有啟發,這裡摘抄部分。
“確定介面是理想選擇,因而應該總是選擇介面而不是具體的類”這其實是一種引誘。當然,對於建立類,幾乎在任何時刻,都可以替代為建立一個介面和一個工廠。
許多人都掉進了這種誘惑的陷阱, 只要有可能就去建立介面和工廠。 這種邏輯看起來好像是因為需要使用不同的具體實現, 因此總是應該新增這種抽象性。 這實際上已經變成了一種萃率的設計優化。
任何抽象性都應該是應真正的需求而產生的。 當必需時, 你應該重構介面而不是到處新增額外級別的間接性, 並由此帶來的額外的複雜性。 這種額外的複雜性非常顯著, 如果你讓某人去處理這種複雜性, 只是因為你意識到由於以防萬一而添加了新介面, 而沒有其他更有說服力的原因, 那麼好吧, 如果我碰上了這種事, 那麼就會質疑此人所作的所有設計了。
恰當的原則應該是優先選擇類而不是介面 。 從類開始, 如果介面的必需性變得非常明確, 那麼就進行重構。 介面是一種重要的工具, 但是它們容易被濫用。