設計模式之美 - 8
設計模式之美 - 9
目錄
面試中常見的問題:
抽象類的特點:
介面的特點:
抽象類存在的意義:
介面存在的意義:
抽象類和介面的應用場景的區別?
如何用抽象類和普通類來模擬介面?
基於介面而非實現程式設計的原因?有必要每個類都定義介面嗎?
介面和抽象類的區別是什麼?
什麼時候用介面?
什麼時候用抽象類?
抽象類和介面存在的意義是什麼?能解決哪些程式設計問題?
我們可以通過抽象類來模擬介面。怎麼來模擬呢?
繼承能解決**復用的問題,抽象類也是為了**復用而生的。那麼相比於普通的類繼承的優勢:
普通類的繼承,無法通過子類的重寫來實現多型特性。
普通類的空方法 和 抽象類的抽象方法的區別:
抽象類更多的是為了**復用,而介面就更側重於解耦。介面是對行為的一種抽象,相當於一組協議或者契約。
什麼時候該用抽象類?什麼時候該用介面?實際上,判斷的標準很簡單。如果要表示一種 is-a 的關係,並且是為了解決**復用問題,我們就用抽象類;如果要表示一種 has-a 關係,並且是為了解決抽象而非**復用問題,那我們就用介面。
介面特性:無成員變數,無方法的**實現,不可以被例項化
從本質上來看,「介面」就是一組「協議」或者「約定」,是功能提供者提供給使用者的乙個「功能列表」。
基於介面而非實現程式設計原則能非常有效地提高**質量,之所以這麼說,那是因為,應用這條原則,可以將介面和實現相分離,封裝不穩定的實現,暴露穩定的介面。上游系統面向介面而非實現程式設計,不依賴不穩定的實現細節,這樣當實現發生變化的時候,上游系統的**基本上不需要做改動,以此來降低耦合性,提高擴充套件性。
這條原則的另乙個表述方式,是「基於抽象而非實現程式設計」。後者的表述方式其實更能體現這條原則的設計初衷。在軟體開發中,最大的挑戰之一就是需求的不斷變化,這也是考驗**設計好壞的乙個標準。越抽象、越頂層、越脫離具體某一實現的設計,越能提高**的靈活性,越能應對未來的需求變化。好的**設計,不僅能應對當下的需求,而且在將來需求發生變化的時候,仍然能夠在不破壞原有**設計的情況下靈活應對。而抽象就是提高**擴充套件性、靈活性、可維護性最有效的手段之一。
是否為類設計介面,需要根據該類的具體功能來決定,對於只有一種實現方式,未來也不可能被其他實現方式替代的類,就沒必要設計介面。
設計模式之美 介面和抽象類的區別
抽象類 抽象類不能被例項化,只能被繼承 不能new 抽象類可以包含屬性和方法,方法可以包含實現,也可以不包含實現 abstract方法 子類繼承抽象類必須實現所有的抽象方法 抽象類也是類,跟子類的關係是is a 繼承本身並不要求父類是抽象類,但是抽象類編譯的時候會要求子類強制實現抽象方法。介面介面不...
讀書筆記 設計模式 介面與抽象類
客戶物件 乙個請求其他物件的服務的物件稱為客戶物件。物件a呼叫了物件b的方法,稱a為客戶物件。定義乙個計算員工薪水的介面,由於有不同的員工,若將計算方法都放在員工類的內部,不利於 的維護。public inte ce salarycal public double getsalary public ...
抽象類和介面筆記
定義 現實生活中很多具有相同特徵的事物歸為乙個抽象類。注意 1.抽象方法只能存在於抽象類中。2.抽象方法不能是private,因為抽象方法沒有具體的實現,需要在子類中繼承並重寫來具體實現 3.第乙個非抽象子類必須實現其父類所有的抽象方法。4.子類的抽象方法不能於父類的抽象方法同名。5.abstrac...