接口

目錄:

接口

接口定義的語法

接口作用:

內(nèi)部類

局部內(nèi)部類

匿名內(nèi)部類

枚舉

jar命令

為什么要制作 JAR 包

接口:

??????? 接口的作用是非常豐富,接口是往往和設(shè)計模式結(jié)合在一起的。

??????? 接口的概念:? —? 可以認為接口是一種 “徹底” 的抽象類。

??????? 接口:是從多個相似的類中抽取出來的一種規(guī)范。接口體現(xiàn)的是規(guī)范。

??????? 接口體現(xiàn)的:通信規(guī)范。

??????? 主板上各種不同類型的 “插槽” ,無論哪個廠商、無論哪個型號的主板,它們都可以與 CPU、顯卡、內(nèi)存進行數(shù)據(jù)通信。

??????? ——因為國際上有一套【公開】的 “標準”(規(guī)范),就是通過接口體現(xiàn)出來的。

接口定義的語法:

????? [ 修飾符 ] interface 接口名

????? {

???????????? // 0~N 個Field 定義

???????????? // 0~N 個抽象方法

???????????? // 0~N 個內(nèi)部類、內(nèi)部接口、內(nèi)部枚舉定義

?????? }

????? 修飾符:? public 或 省略

????? 接口名:? 多個單詞連綴而成,每個單詞的首字母大寫

?????????????????????? 推薦接口用 “形容詞”。

???????????? ? ? ? ? ? c# 推薦接口以 I 開頭,所以后來有些Java程序員也喜歡這種方式。

【接口里的成分,都是 public? ——? 因為接口體現(xiàn)的是【公開】的 “標準”】

??? A。接口不能有構(gòu)造器。也不能有初始化塊。

??? B。接口里的 Field ,默認有 3 個修飾符:public? static? final?

???????????????????????????????????? 無論你寫還是不寫,反正都有。

????????????????? 【接口里的 Field ,聲明必須指定初始值

????????????????????? 原因:final 修飾的類變量只能在聲明時、靜態(tài)初始化塊中指定初始值,

???????????????????????????????? 又由于接口不包含初始化塊,所以只能在聲明時指定初始值?!?/p>

?? C。接口里的方法,默認有 2 個 :? public? abstract

???????????????????????????????????? 無論你寫還是不寫,反正都有。

????????????? 接口里的方法不可能是 static,因為接口里的方法默認有 abstract 修飾

?? D。接口里的內(nèi)部類、內(nèi)部接口、內(nèi)部枚舉,默認也有 2 個修飾符:public? static?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 無論你寫還是不寫,反正都有。

?? E。一個接口可以有 N 個直接父接口。

接口作用:

??? A。接口可用于定義變量!

??? B。接口不能直接創(chuàng)建實例

??? C。接口最大用途就是供其他類來實現(xiàn)自己

??? implements,實現(xiàn)一個或N個接口。

??? 當一個類實現(xiàn)接口之后,

? ? ? ? ??? A。實現(xiàn)類要么為接口的所有抽象方法提供實現(xiàn)

? ? ? ? ? ? ? ? ? ?? 否則你的實現(xiàn)類也只能是抽象類

? ? 接口主要是在 ”面向接口編程“ 時提供更靈活的機制。

接口與抽象類之間的相似之處:

???????? A。都可以包含抽象方法。

???????? B。都不能創(chuàng)建實例

???????? C。子類繼承抽象類或者實現(xiàn)了接口,都要求實現(xiàn)所有的抽象方法,

?????????????? 否則子類也只能是抽象類。

接口與抽象類之間的區(qū)別:

???????? A。接口里只能有抽象方法,但抽象類可以沒有抽象方法,只包含普通方法。

?????? ? B。接口里不能定義靜態(tài)方法,但抽象類可以包含靜態(tài)方法

??????? C。接口里的 Field 總是有 public static final?

? ? ? ? ? ? ? 但抽象類中的 Field 完全可以是最普通的 Field

??????? D。接口不能包括構(gòu)造器,但抽象類完全可以有構(gòu)造器。

? ? ? ? E。接口不能包括初始化塊,但抽象類完全可以有初始化塊。

??????? F。接口可以有多個直接的父接口,抽象類只能有一個直接父類


簡單工廠模式,命令模式。


類中的 5 種成員:

??? Field

??? 方法

??? 構(gòu)造器

??? 初始化塊

??? 內(nèi)部類/接口/枚舉

? 可以把接口理解成一個【完全抽象、徹底抽象】的特殊類

? 枚舉是一種實例數(shù)固定的類。


內(nèi)部類

?? ?? — 就是把一個類放在類里面定義。

???? 內(nèi)部類 — 寄生類?????? 外部類 — 宿主類

??????? 內(nèi)部類,由于它的上一級程序單元是類。

????????? ?? ????????????? 因此它完全可以使用 private | protected | 默認 | public 這 4 個訪問控制符。

????????? ? ? ? ? ? ? 由于內(nèi)部的上一級程序單元是類??梢杂?static 修飾

?????????????????????????? 有 static 修飾的內(nèi)部類,屬于外部類本身。

?????????????????????????? 無 static 修飾的內(nèi)部類,屬于外部類的實例。

???????? 內(nèi)部類的生成的 class 文件名字為:外部類$內(nèi)部類.class

~~~~~~~~~~~~~~非靜態(tài)內(nèi)部類~~~~~~~~~~~~~~~~~

內(nèi)部類一個好處:它可以直接訪問外部類的 private 成員(包括 field/方法/構(gòu)造器)

??? 內(nèi)部類可以直接訪問外部類的成員,包括 private 成員!

??? 反過來,外部類不可以訪問內(nèi)部類的成員。

??? 內(nèi)部類,還有一個名稱 ”寄生類“。

??????? 如果是沒有 static 修飾的內(nèi)部類的實例,必須寄生在”外部類“ 的實例里。

??????? 如果是 static 修飾的內(nèi)部類的實例,寄生在”外部類“ 的類本身里。

??? 非靜態(tài)內(nèi)部類,也是屬于非靜態(tài)成員,

????????????? —— 因為不能被外部類的靜態(tài)成員所訪問。

~~~~~~~~~~~~~~靜態(tài)內(nèi)部類~~~~~~~~~~~~~~~~~

?? 用 static 修飾

? ? ? static 修飾的內(nèi)部類的實例,必須寄生在”外部類“ 的類本身里。

? ? ? 靜態(tài)內(nèi)部類,也是屬于靜態(tài)成員,因此它不能訪問外部類的非靜態(tài)成員(Field 方法)

使用內(nèi)部類

?????? A。定義變量???? B。創(chuàng)建實例???? C。訪問它的類 Field / 類方法

????? 1. 如果在外部類的里面,使用內(nèi)部類。

????????????? 并沒有太多需要注意的地方

????? 2. 在外部類的外面,使用內(nèi)部類。

??????????? A。非靜態(tài)內(nèi)部類

?????????????????? 聲明變量:? 外部類.內(nèi)部類?? 變量名

??????????????? ?? 創(chuàng)建非靜態(tài)內(nèi)部類的實例,在此之前,必須先創(chuàng)建外部類的實例 — 先建宿主

?????????????????? 接下來,用??? 宿主.new 外部類構(gòu)造器();

?????????????????? 非靜態(tài)內(nèi)部類派生子類

.????????????????? 由于子類的構(gòu)造器,必須調(diào)用父類構(gòu)造器一次

?????????????????? 因此必須在子類構(gòu)造器中使用宿主對象去調(diào)用非靜態(tài)內(nèi)部類的構(gòu)造器

局部內(nèi)部類

匿名內(nèi)部類

枚舉(JDK 1.5才有)

?????? 用于代表“實例已經(jīng)固定”的類

?????? 修飾符? enum 枚舉名

?????? {

????????????? // 立即在第一行列出該枚舉的所有實例

?????? }

??????? - 修飾符? 可以是? public | 省略、abstract | final(a? f? 總有其中一個)

?????? 所有枚舉都有一個values() 方法,該方法返回所有的枚舉實例

枚舉類可以有 Field 、方法、構(gòu)造器、初始化塊、內(nèi)部類

?????? 列出枚舉值,并不是簡單的定義幾個枚舉值的變量名

?????? 而是調(diào)用枚舉類的構(gòu)造器來創(chuàng)建相應(yīng)的實例

定義枚舉的方法注意點:

??? jar命令

命令

為什么要制作 JAR 包







/*

補充:? 對于執(zhí)行“宏替換”,變量名應(yīng)該多個單詞連綴而成

??????????? 對于字母全部大寫,單詞與單詞之間以下劃線隔開

*/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容