日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第18条:接口优于抽象类

發(fā)布時間:2025/4/16 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第18条:接口优于抽象类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??

1.內(nèi)容導(dǎo)向

本條內(nèi)容的主要重點——骨架類,集成接口和抽象類的優(yōu)點于一身。

2.接口的優(yōu)點

  • 現(xiàn)有的類可以很容易的被更新,以實現(xiàn)新的接口。
    如果你前期編寫了一個類A,后期有在系統(tǒng)中加入了一個新的接口B,當你想讓前期編寫的類來實現(xiàn)這個接口,你只用加上一句implement B,然后在類A中實現(xiàn)里面的方法即可,不會影響到以前的類對類A的使用。
  • 接口是定義mixin(混合類型)的理想選擇。
    這一條主要說的是,一個類可以實現(xiàn)多個接口。一個類除了可以實現(xiàn)一個它的主要類型接口之外,還可以加入一些輔助接口來實現(xiàn)一些新的功能。
  • 接口允許我們構(gòu)造非層次結(jié)構(gòu)的類型框架。
    這一條主要說的是,接口可以多繼承
    層次結(jié)構(gòu)的類型:

  如上圖,對于這種遵守參差結(jié)構(gòu)的類型來說,我們要用類的繼承來實現(xiàn)是容易的。但是我們遇到的類型關(guān)系并不總是遵循這種層次類型。
  比如:web開發(fā),我們有一種程序猿類型為“前端攻城獅”,一種類型為“后端攻城獅”還有一種是“web全棧攻城獅”,我們要用類來表示他們?nèi)咧g的三角關(guān)系,啊不對,是類型關(guān)系的話將會是一件十分困難的事情。但是如果用接口,將會十分輕松。直接定義三個類型的接口,讓“web全棧攻城獅”同時繼承前端和后端工程師即可。

  • 接口可以使得類的增強變得安全
    這一點主要說的是第16條(復(fù)合優(yōu)于繼承)中的“包裝類”.

3.骨架類

  眾所周知,java 8之前接口是不可以有方法體的,這就是抽象類相對于接口的優(yōu)勢,為了將抽象類和接口的優(yōu)勢整合起來,“骨架類”就誕生了,骨架類的做法是用一個抽象類來實現(xiàn)一個接口,在抽象類中為接口的某些方法提供實現(xiàn)。
  骨架類的實現(xiàn)的一般步驟是,找出接口中的基本方法,在抽象類中聲明為抽象方法,然后用這些基本方法來實現(xiàn)其他方法,所謂基本方法,就是通過將這些方法組合或是變換,可以實現(xiàn)其他的方法。

4.有關(guān)骨架類的例子

為了便于理解,這里舉一個炒雞簡單的例子,想看更深層次的例子,可以去看java類庫中的AbstractCollection<E>這個類。

例子: 假設(shè)有一個接口,它可以實現(xiàn)一組對象的求和,代碼如下:

public interface Summation<T> {//實現(xiàn)兩個對象的相加T towEleAdd(T obj01, T obj02);//實現(xiàn)List求和T listEleSum(List<T> list);//實現(xiàn)數(shù)組求和T arrayEleSum(T[] array); }

根據(jù)觀察,它的基本方法只有一個T towEleAdd(T obj01, T obj02);,現(xiàn)在我們可以來實現(xiàn)他的“骨架”了:

public abstract class AbstractSummation<T> implements Summation<T> {@Overridepublic abstract T towEleAdd(T obj01, T obj02);@Overridepublic T listEleSum(List<T> list) {T firstEle = null;for (T t : list) {if (firstEle == null) {firstEle = t;continue;}firstEle = towEleAdd(firstEle, t);}return firstEle;}@Overridepublic T arrayEleSum(T[] array) {T firstEle = null;for (T t : array) {if (firstEle == null) {firstEle = t;continue;}firstEle = towEleAdd(firstEle, t);}return firstEle;} }

繼承這個骨架類就只用實現(xiàn)towEleAdd方法,就可以完成一組對象的求和工作了。

轉(zhuǎn)載于:https://my.oschina.net/jtzen9/blog/1527788

總結(jié)

以上是生活随笔為你收集整理的第18条:接口优于抽象类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。