目錄:
接口
接口定義的語法
接口作用:
內(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)該多個單詞連綴而成
??????????? 對于字母全部大寫,單詞與單詞之間以下劃線隔開
*/