1. 程式人生 > 其它 >建構函式 繼承qt_qt5.15 步步走-1.認識qt程式

建構函式 繼承qt_qt5.15 步步走-1.認識qt程式

介面

JAVA程式設計思想有一句話說:介面被用來建立類與類之間的協議。

如果你想在JAVA實現多重繼承,那你必須使用介面。(Java語言特性:單繼承多實現)

在介面和抽象類的選擇上,必須遵守這樣一個原則:行為模型應該總是通過介面而不是抽象類定義。

1.1 介面概述
介面就是一種公共的規範標準,只要符合規範標準,大家都可以通用
JAVA中的介面更多的體現在 “對行為的抽象”

1.2 介面特點
* 介面用關鍵字interface修飾
* 類實現介面用implements標識
* 介面不能例項化 (通過實現類物件例項化,這叫介面多型)
多型的形式:具體類多型,抽象類多型,介面多型。
多型的前提:有繼承或者實現關係;有方法重寫;有父(類/介面)引用指向(子/實現)類物件
* 介面的實現類
要麼重寫介面中的所有抽象方法
要麼是抽象類

1.3 介面的成員特點
* 成員變數 只能是常量 預設修飾符 public static final

* 構造方法
介面沒有構造方法,因為介面主要是對行為進行抽象的,沒有具體存在
一個類如果沒有父類,預設繼承自Object類
* 成員方法
介面中普通抽象方法是由public abstract修飾的。(java8提供default方法和static方法)

1.4 類和介面的關係
* 類和類的關係
繼承關係,只能單繼承,但是可以多層繼承
* 類和介面的關係
實現關係,可以單實現,也可以多實現,還可以在繼承一個類的同時實現多個介面。
* 介面和介面的關係
繼承關係,可以單繼承,也可以多繼承。

1.5 抽象類和介面的區別
* 成員區別
抽象類 常量,變數;有構造方法;有抽象方法,也有非抽象方法。
介面 常量,抽象方法。
* 關係區別
類與類 繼承,單繼承
類與介面 實現,可以單實現,也可以多實現。
介面與介面 繼承,單繼承,多繼承。
* 設計理念區別
抽象類 對類抽象,包括屬性、行為
介面 對行為抽象,主要是行為。

上面只是從語法層次和程式設計角度來區分它們之間的關係,這些都是低層次的,要真正使用好抽象類和介面,我們就必須要從較高層次來區分了。只有從設計理念的角度才能看出它們的本質所在。
一般來說他們存在如下三個不同點:
1、 抽象層次不同。抽象類是對類抽象,而介面是對行為的抽象。抽象類是對整個類整體進行抽象,包括屬性、行為,但是介面卻是對類區域性(行為)進行抽象。
2、 跨域不同。抽象類所跨域的是具有相似特點的類,而介面卻可以跨域不同的類。我們知道抽象類是從子類中發現公共部分,然後泛化成抽象類,子類繼承該父類即可,但是介面不同。
實現它的子類可以不存在任何關係,共同之處。例如貓、狗可以抽象成一個動物類抽象類,具備叫的方法。鳥、飛機可以實現飛Fly介面,具備飛的行為,這裡我們總不能將鳥、飛機共用一個父類吧!
所以說抽象類所體現的是一種繼承關係,要想使得繼承關係合理,父類和派生類之間必須存在"is-a" 關係,即父類和派生類在概念本質上應該是相同的。
對於介面則不然,並不要求介面的實現者和介面定義在概念本質上是一致的, 僅僅是實現了介面定義的契約而已。
3、 設計層次不同。對於抽象類而言,它是自下而上來設計的,我們要先知道子類才能抽象出父類,
而介面則不同,它根本就不需要知道子類的存在,只需要定義一個規則即可,至於什麼子類、什麼時候怎麼實現它一概不知。
比如我們只有一個貓類在這裡,如果你這是就抽象成一個動物類,是不是設計有點兒過度?我們起碼要有兩個動物類,貓、狗在這裡,我們在抽象他們的共同點形成動物抽象類吧!
所以說抽象類往往都是通過重構而來的!但是介面就不同,比如說飛,我們根本就不知道會有什麼東西來實現這個飛介面,怎麼實現也不得而知,我們要做的就是事前定義好飛的行為介面。
所以說抽象類是自底向上抽象而來的,介面是自頂向下設計出來的。

1.6 JAVA程式設計思想:

“確定介面是理想選擇,因而應該總是選擇介面而不是具體的類。”這其實是一種誘餌。當然,對於建立類,幾乎在任何時刻,都可以替代為建立一個介面和一個工廠。

許多人都掉進了這種誘惑的陷阱,只要有可能就去建立介面和工廠。這種邏輯看起來是因為需要使用不同的具體實現,因此總是應該新增這種抽象性。這實際上已經變成了一種草率的設計優化。

任何抽象性都應該是應真正的需求而產生的。當必須時,你應該重構介面而不是到處新增額外級別的間接性,並由此帶來的額外的複雜性。這種額外的複雜性非常顯著,
如果你讓某人去處理這種複雜性,只是因為你意識到由於以防萬一而添加了新介面,而沒有其他更有說服力的原因,那麼好吧,如果我碰上了這種事,那麼就會質疑此人所做的所有設計了。

恰當的原則應該是優先選擇類而不是介面。從類開始,如果介面的必須性變得非常明確,那麼就進行重構。介面是一種重要的工具,但是他們容易被濫用。