摘要:抽象類和抽象方法抽象方法這種方法是不完整的,僅有聲明而沒(méi)有方法。創(chuàng)建抽象類和抽象方法非常有用,因?yàn)樗麄兛梢允估鄣某橄笮悦鞔_起來(lái),并告訴用戶和編譯器打算怎樣來(lái)使用它們。接口用于建立類于類之間的協(xié)議。與抽象類相同,防止客戶端程序員創(chuàng)建該類對(duì)象。
點(diǎn)擊進(jìn)入我的博客
接口和內(nèi)部類為我們提供了一種將接口與實(shí)現(xiàn)分離的更加結(jié)構(gòu)化的方法。
9.1抽象類和抽象方法抽象方法:這種方法是不完整的,僅有聲明而沒(méi)有方法。用abstract修飾的方法。
抽象類:包含抽象方法的類叫做抽象類。如果一個(gè)類包含一個(gè)或多個(gè)抽象方法,該類必須被限定為抽象的。用abstract修飾的類。
可以創(chuàng)建一個(gè)沒(méi)有抽象方法的抽象類。
創(chuàng)建抽象類和抽象方法非常有用,因?yàn)樗麄兛梢允估鄣某橄笮悦鞔_起來(lái),并告訴用戶和編譯器打算怎樣來(lái)使用它們。抽象類還是很有用的重構(gòu)工具,因?yàn)樗鼈兪沟梦覀兛梢院苋菀椎貙⒐卜椒ㄑ刂^承層次結(jié)構(gòu)向上移動(dòng)。
9.2 接口interface關(guān)鍵字產(chǎn)生類一個(gè)完全抽象的類(接口),它根本沒(méi)有任何具體實(shí)現(xiàn)。
一個(gè)接口表示:所有實(shí)現(xiàn)了該特定接口的類看起來(lái)都像這樣。
接口用于建立類于類之間的協(xié)議。
接口中的域:默認(rèn)是public、static和final的。
接口中的方法只能是public的,而且默認(rèn)就是public的。
9.3 完全解耦復(fù)用代碼的第一種方式是客戶端程序員遵循該接口來(lái)編寫它們自己的類。
策略設(shè)計(jì)模式更詳細(xì)的請(qǐng)看設(shè)計(jì)模式!!!
根據(jù)所傳遞的參數(shù)對(duì)象的不同而具有不同行為的方法。
這類方法包含所要執(zhí)行的算法中固定不變的部分,而“策略”包含變化的部分。
策略就是傳遞進(jìn)去的參數(shù)對(duì)象。
public class Test { static void process(Processor p) { p.process(); } public static void main(String[] args) { Test.process(new Processor1()); Test.process(new Processor2()); } } interface Processor { void process(); } class Processor1 implements Processor { public void process() { System.out.println("1"); } } class Processor2 implements Processor { public void process() { System.out.println("2"); } }適配器設(shè)計(jì)模式
你經(jīng)常會(huì)無(wú)法修改你想使用的類,因?yàn)橐话隳闶鞘褂玫谌降念悗?kù)。
適配器模式把一個(gè)類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無(wú)法在一起工作的兩個(gè)類能夠在一起工作。
9.4 Java中的多重繼承Java最多只能繼承一個(gè)類,但是可以實(shí)現(xiàn)多個(gè)接口
一個(gè)類可以向上轉(zhuǎn)型成任何一個(gè)接口。
使用接口的原因:
為了能夠向上轉(zhuǎn)型成為多個(gè)基類類型。
與抽象類相同,防止客戶端程序員創(chuàng)建該類對(duì)象。
抽象類OR接口:
如果要?jiǎng)?chuàng)建不帶任何方法定義和成員變量的基類,那么就應(yīng)該選擇接口而不是抽象類。
事實(shí)上,如果知道某事物應(yīng)該成為一個(gè)基類,那么第一選擇應(yīng)該是使它成為一個(gè)接口。
9.5 通過(guò)繼承來(lái)擴(kuò)展接口接口可以繼承其他接口
接口可以一次性繼承多個(gè)其他接口
9.5.1 組合接口時(shí)的名字沖突完全相同的方法不會(huì)有問(wèn)題
interface I1 { void f();} interface I2 { int f(int i);} interface I3 { int f();} class C { int f() { return 0; } } // 兩個(gè)方法重載 class C2 implements I1, I2 { public void f() { } public int f(int i) { return 0; } } // 重載 class C3 extends C implements I2 { public int f(int i) { return 0; } } // 相同的方法沒(méi)問(wèn)題,同時(shí)重寫兩個(gè)方法 class C4 extends C implements I3 { public int f() { return 4; } } // 此時(shí)是有問(wèn)題的 class C5 extends C implements I1 { }9.6 適配接口
接口最吸引人的原因之一就是允許同一個(gè)接口具有多個(gè)不同的具體實(shí)現(xiàn)。
9.7 接口中的域因?yàn)榻涌谥械挠蚴?b>public、static和final的,所以接口可以用來(lái)創(chuàng)建常量組(盡量避免這么做!)。
9.7.1 初始化接口中的域在接口中定義的域不能是空final,但是可以被非常量表達(dá)式初始化。
static代碼塊不能出現(xiàn)在接口中
9.8 嵌套接口接口可以嵌套在類或其他接口中。
類內(nèi)部的接口可以有四種權(quán)限控制符。
接口內(nèi)部的接口可以只能是public的。
當(dāng)實(shí)現(xiàn)某個(gè)接口時(shí),不需要實(shí)現(xiàn)嵌套在其內(nèi)部的任何接口。
9.9 接口與工廠接口是實(shí)現(xiàn)多重繼承的途徑,而生成遵循某個(gè)接口的對(duì)象的典型方法就是工廠方法。
這與直接調(diào)用構(gòu)造器不同,我們?cè)诠S對(duì)象上調(diào)用的是創(chuàng)建方法,而該工廠對(duì)象將生成接口的某個(gè)實(shí)現(xiàn)的對(duì)象。
9.10 總結(jié)優(yōu)先使用類而不是接口!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/72197.html
摘要:的構(gòu)造器經(jīng)過(guò)重載可以接受多種輸出目的地,不過(guò)最常用的還是和。組號(hào)為表示整個(gè)表達(dá)式,組號(hào)表示被第一對(duì)括號(hào)括起的組,依此類推。有多個(gè)重載的構(gòu)造器,可以接受和對(duì)象。 點(diǎn)擊進(jìn)入我的博客 字符串操作是計(jì)算機(jī)程序設(shè)計(jì)中最常見的行為 13.1 不可變String String底層是由char[]實(shí)現(xiàn)的,是不可變的。看起來(lái)會(huì)改變String的方法,實(shí)際上都是創(chuàng)建了一個(gè)新的String對(duì)象,任何指向它...
摘要:包命名規(guī)范使用小寫字母。包訪問(wèn)權(quán)限為把類聚在一個(gè)包中的做法提供了意義和理由。接口訪問(wèn)權(quán)限使用關(guān)鍵字,意味著被它修飾的成員對(duì)所有類可見。繼承訪問(wèn)權(quán)限基類的創(chuàng)建者希望某些特定成員,把它的訪問(wèn)權(quán)限賦予派生類也不是所有類。 點(diǎn)擊進(jìn)入我的博客 6.1包:庫(kù)單元 import java.util.ArrayList; import java.util.*; 當(dāng)編寫一個(gè)Java源代碼文件(編譯單...
摘要:在設(shè)計(jì)模式中,所有的設(shè)計(jì)模式都遵循這一原則。其實(shí)就是說(shuō)在應(yīng)用程序中,所有的類如果使用或依賴于其他的類,則應(yīng)該依賴這些其他類的抽象類,而不是這些其他類的具體類。使用設(shè)計(jì)模式是為了可重用代碼讓代碼更容易被他人理解保證代碼可靠性。 這是劉意老師的JAVA基礎(chǔ)教程的筆記講的賊好,附上傳送門 傳智風(fēng)清揚(yáng)-超全面的Java基礎(chǔ) 一、面向?qū)ο笏枷朐O(shè)計(jì)原則 1.單一職責(zé)原則 其實(shí)就是開發(fā)人員經(jīng)常說(shuō)的高...
摘要:迭代器通常被成為輕量級(jí)對(duì)象創(chuàng)建它的代價(jià)很小。與迭代器可以用于數(shù)組和所有對(duì)象,之所以能夠工作,是因?yàn)槔^承了接口。 點(diǎn)擊進(jìn)入我的博客 我覺得本章名字改成容器似乎更好理解,持有對(duì)象讓人感到一頭霧水我們需要在任意時(shí)刻和任意位置創(chuàng)建任意數(shù)量的對(duì)象,所以依靠創(chuàng)建命名的引用來(lái)持有對(duì)象已經(jīng)滿足不了需求。Java可以用數(shù)組和其他容器類來(lái)(List、Set、Queue、Map)來(lái)解決這個(gè)問(wèn)題,不同的容器...
摘要:接口與類型信息關(guān)鍵字的一種重要目標(biāo)就是允許程序員隔離構(gòu)件,進(jìn)而降低耦合性。如果你編寫接口,那么就可以實(shí)現(xiàn)這一目標(biāo),但是通過(guò)類型信息,這種耦合性還是會(huì)傳播出去接口并非是對(duì)解耦的一種無(wú)懈可擊的保障。 點(diǎn)擊進(jìn)入我的博客 運(yùn)行時(shí)類型信息使得你可以在運(yùn)行時(shí)發(fā)現(xiàn)和使用類型信息,主要有兩種方式: 傳統(tǒng)的RTTI,它假定我們?cè)诰幾g時(shí)已經(jīng)知道了所有的類型; 反射機(jī)制,它允許我們?cè)谶\(yùn)行時(shí)發(fā)現(xiàn)和使用類的...
閱讀 3063·2021-11-24 10:34
閱讀 3322·2021-11-22 13:53
閱讀 2630·2021-11-22 12:03
閱讀 3598·2021-09-26 09:47
閱讀 3005·2021-09-23 11:21
閱讀 4772·2021-09-22 15:08
閱讀 3289·2021-07-23 10:59
閱讀 1258·2019-08-29 18:31