一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

類和接口的深入理解、技巧

 2017helloworld 2018-03-15

類和接口是Java程序設(shè)計(jì)語(yǔ)言的核心,也是Java語(yǔ)言的基本抽象單元。Java語(yǔ)言提供了許多強(qiáng)大的基本元素,供程序員用來(lái)設(shè)計(jì)類和接口。

類和接口的深入理解、技巧

第一條:使類和成員的可訪問(wèn)性最小

一個(gè)設(shè)計(jì)良好的模塊,最重要的一點(diǎn)是要對(duì)于外部模塊隱藏關(guān)鍵的實(shí)現(xiàn)細(xì)節(jié),只外漏該外拋的方法。模塊之間只通過(guò)它們之間的API進(jìn)行通訊訪問(wèn)。在Java的程序設(shè)計(jì)語(yǔ)言中,通過(guò)訪問(wèn)控制來(lái)實(shí)現(xiàn)類、接口和成員的可訪問(wèn)性限制,這些修飾符有public、protected和private。類和接口的修飾符只能是public或默認(rèn)

對(duì)于頂層接口設(shè)計(jì),只有兩種可訪問(wèn)的級(jí)別:包級(jí)私有和公有的。如果用public修飾符聲明了頂層類或接口,則它是公有訪問(wèn)級(jí)別的。否則是包級(jí)私有的。如果類或接口能做成包級(jí)私有,就應(yīng)該做成包級(jí)私有,這樣發(fā)布的版本客戶就不會(huì)影響客戶端的操作。

如果一個(gè)包級(jí)私有的頂層類只在某個(gè)類中內(nèi)部使用,可以考慮把它設(shè)計(jì)未嵌套內(nèi)部類。對(duì)于成員(域、方法、嵌套類和嵌套接口)有四中可能的訪問(wèn)級(jí)別:

  • 私有的(private):只有在聲明該成員的頂層類內(nèi)部才可以訪問(wèn)這個(gè)成員。

  • 包級(jí)私有的:聲明該成員的包內(nèi)部的任何類都可以訪問(wèn)這個(gè)成員,一般也被稱之為“缺省訪問(wèn)級(jí)別default”,如果沒(méi)有給成員顯示指定訪問(wèn)修飾符,就是這個(gè)。

  • 受保護(hù)的(protected):聲明該成員的類的子類可以訪問(wèn)這個(gè)成員,并且包內(nèi)部的任何類也可以訪問(wèn)。

第二條:在共有類中使用訪問(wèn)方法來(lái)替代公有域

類和接口的深入理解、技巧

由于這種類的數(shù)據(jù)可以被直接訪問(wèn),這些類沒(méi)有提供封裝功能,所以如果沒(méi)有改變API接口,就無(wú)法改變它的數(shù)據(jù)行為,一般我們的建議是如果類可以在它所在的包外被訪問(wèn),就應(yīng)該主動(dòng)提供訪問(wèn)的方法來(lái)訪問(wèn)。

類和接口的深入理解、技巧

第三條:使可變性最小化

不可變類只是實(shí)例不能被修改的類,每個(gè)實(shí)例中包含的字段信息都應(yīng)該在實(shí)例創(chuàng)建的時(shí)候進(jìn)行指定,比如String。不可變類更加易于設(shè)計(jì)、實(shí)現(xiàn)和使用,不容易出錯(cuò)。為了使類成為不可變類,一般遵循下面五條規(guī)則:

  1. 不要提供任何會(huì)修改對(duì)象狀態(tài)的方法

  2. 保證類不會(huì)被繼承擴(kuò)展

  3. 使所有的域都是final類型的

  4. 使所有的域都是私有的

  5. 確保對(duì)于任何可變組件的互斥訪問(wèn)

第四條:組合優(yōu)先于繼承

繼承是代碼重用的有力手段,但是在Java程序開(kāi)發(fā)匯總,我們更推薦在包的內(nèi)部使用繼承,主要是因?yàn)檫@種方式相對(duì)于包外的繼承更安全。

與通過(guò)組合形式的方法調(diào)用不同,繼承打破了封裝性,子類依賴其父類中特定的功能細(xì)節(jié)。

第五條:接口優(yōu)于抽象類

Java程序中提供了接口和抽象類來(lái)實(shí)現(xiàn)多個(gè)實(shí)現(xiàn)的類型。明顯的區(qū)別是抽象類中允許包含某些方法的實(shí)現(xiàn),接口中是不允許的。Java中的類是單繼承,搜易抽象類作為類型定義會(huì)收到極大的限制。使用接口主要有以下好處:

  • 現(xiàn)有類可以很容易被更新,以實(shí)現(xiàn)新接口

  • 接口的定義是混合類型的立項(xiàng)選擇

  • 接口允許我們構(gòu)造非層次結(jié)構(gòu)的類型框架,比如一個(gè)人是歌唱家又是作曲家。

我們知道通過(guò)接口的多實(shí)現(xiàn)特性可以構(gòu)建多層次的類結(jié)構(gòu),我們同時(shí)也可以通過(guò)對(duì)每個(gè)接口都提供一個(gè)抽象的骨架實(shí)現(xiàn)類,把接口和抽象類的優(yōu)點(diǎn)結(jié)合起來(lái)。

第六條:接口只用于定義類型

在我們開(kāi)發(fā)中,我們一定出現(xiàn)過(guò)在接口中定義靜態(tài)常量的情況,這種接口稱之為常量接口。

類和接口的深入理解、技巧

常量接口是對(duì)接口的不恰當(dāng)使用。在Java中如果我們要定義常量,可以使用枚舉的方式進(jìn)行定義?;蛘咄ㄟ^(guò)不可實(shí)例化的工具類來(lái)導(dǎo)出這些常量,避免通過(guò)實(shí)現(xiàn)綁定到具體的類上。

第七條:類層次優(yōu)于標(biāo)簽類

類層次在前面我們已經(jīng)知道了,那什么是標(biāo)簽類呢?如下面:

類和接口的深入理解、技巧

這種標(biāo)簽類存在很多缺點(diǎn),里面包含了很多樣板代碼,里面包含了枚舉聲明、標(biāo)簽句以及條件判斷,由于很多亂七八糟的邏輯囊括在一個(gè)類中,破壞了可讀性,內(nèi)存占用也響應(yīng)的增加了。

那么針對(duì)標(biāo)簽類我們?nèi)绾蝺?yōu)化呢?這里就可以使用到層次類來(lái)進(jìn)行優(yōu)化,將標(biāo)簽類轉(zhuǎn)換為層次類首先要為標(biāo)簽類中的每個(gè)方法定義一個(gè)包含該方法的抽象類,比如area方法。接下來(lái)就是為原始標(biāo)簽類定義根類的具體子類。

類和接口的深入理解、技巧

通過(guò)上面的優(yōu)化體驗(yàn)上來(lái)說(shuō),就是規(guī)劃好累的層次,精簡(jiǎn)類的職能。

第八條:優(yōu)先考慮靜態(tài)成員類

定義在一個(gè)類中的內(nèi)部類稱之為嵌套類。嵌套類存在的目的是為了輔助它的外圍類,如果嵌套類出現(xiàn)用于外部其它環(huán)境中,它就應(yīng)該被定義成頂層類。嵌套類有四中:靜態(tài)內(nèi)部類、非靜態(tài)成員類、匿名類和局部類。除了靜態(tài)內(nèi)部類外,其它的三種都被稱之為內(nèi)部類。

靜態(tài)成員類是最簡(jiǎn)單的一種嵌套類。與普通的類相差不大,只是定義在另一個(gè)類的內(nèi)部,它可以訪問(wèn)外圍類的所有成員,包含那些私有成員,它和靜態(tài)成員一樣。

非靜態(tài)成員類的每個(gè)實(shí)例都隱藏著與外圍類的一個(gè)實(shí)例引用。非靜態(tài)成員類可以調(diào)用外圍類的方法,或者通過(guò)修飾后的this獲取外圍類的實(shí)例引用。如果嵌套類的實(shí)例可以在它的外圍類的實(shí)例之外獨(dú)立存在,這個(gè)類就必須是靜態(tài)成員類。

如果聲明成員類不要求訪問(wèn)外部實(shí)例,就要始終把static修飾符放到它的聲明中,使它成為靜態(tài)成員類,而不是非靜態(tài)成員類。如果省略了static修飾符,則每個(gè)實(shí)例都將包含一個(gè)額外指向外圍對(duì)象的引用,保存這份引用需要耗費(fèi)時(shí)間和空間。

匿名類不同于任何Java中的其它語(yǔ)法單元,它不與其他成員一起被聲明,而是在使用的同時(shí)被聲明和實(shí)例化。

總結(jié)

通過(guò)這一章的接口和類的比較,增加了對(duì)接口和類的更深入了解,同時(shí)對(duì)類的設(shè)計(jì)有了更進(jìn)一步的思考。主要體現(xiàn)在以下幾個(gè)方面:

  1. 類和接口的設(shè)計(jì)要盡量封閉,減少外拋的接口,使之可訪問(wèn)性降低,更加穩(wěn)定;

  2. 對(duì)公有域(成員變量)盡量使用方法來(lái)進(jìn)行獲取設(shè)置,不要直接進(jìn)行操作,以便后續(xù)可以豐富完善;

  3. 類和接口設(shè)計(jì)要精簡(jiǎn)、干練,避免冗余形成標(biāo)簽類;

  4. 多使用接口進(jìn)行豐富類的功能,降低類的層次;

  5. 內(nèi)部類的作用是為了輔助外圍內(nèi),不要本末倒置;

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲男人天堂网在线视频| 日本办公室三级在线观看| 欧美性猛交内射老熟妇| 亚洲最新中文字幕在线视频| 狠狠做深爱婷婷久久综合| 成年人免费看国产视频| 亚洲国产欧美精品久久| 中文字幕日韩欧美理伦片| 国产精品午夜视频免费观看 | 中文字幕亚洲精品人妻| 亚洲黄色在线观看免费高清| 日本高清视频在线观看不卡 | 日本加勒比在线播放一区| 日本理论片午夜在线观看| 日韩中文字幕视频在线高清版| 成人精品国产亚洲av久久| 亚洲国产综合久久天堂| 91免费一区二区三区| 91免费一区二区三区| 五月婷婷六月丁香在线观看 | 日韩视频在线观看成人| 午夜福利精品视频视频| 久久福利视频在线观看| 91精品蜜臀一区二区三区| 久久re6热在线视频| 护士又紧又深又湿又爽的视频| 大香蕉久久精品一区二区字幕| 久久热中文字幕在线视频| 欧美精品在线观看国产| 亚洲精品欧美精品日韩精品| 五月婷婷缴情七月丁香| 日韩一区二区三区四区乱码视频| 中文字幕区自拍偷拍区| 制服丝袜美腿美女一区二区| 麻豆剧果冻传媒一二三区| 日本二区三区在线播放| 国产原创激情一区二区三区| 亚洲视频一级二级三级| 精品国产亚洲一区二区三区 | 国产欧美日韩在线一区二区| 少妇丰满a一区二区三区|