接口
- 接口的概念
接口使用interface關(guān)鍵字來定義。 接口中的所有方法自動地屬于public。 - 接口的特性
接口中的域?qū)⒈蛔詣釉O(shè)為public static final。
接口可以多實現(xiàn),類不可以多繼承。 - 接口與抽象類
初學(xué)時,覺得抽象類和接口的區(qū)分程度不是大 - 靜態(tài)方法
在Java SE 8中,允許在接口中增加靜態(tài)方法 - 默認(rèn)方法
可以為接口方法提供一個默認(rèn)實現(xiàn)。必須用default修飾符標(biāo)記這樣一個方法。 - 解決默認(rèn)方法沖突
1)超類優(yōu)先
2)接口沖突
接口示例
- 接口與回調(diào)
- Comparator接口
public interface Comparator<T> {
int compare(T first, T second);
}
- 對象克隆
Cloneable只是一個標(biāo)記接口,要實現(xiàn)clone()方法的類必須實現(xiàn)該接口。 默認(rèn)是淺拷貝。
lambda表達(dá)式
- 為什么引入lambda表達(dá)式
lambda表達(dá)式是一個可傳遞的代碼塊,可以在以后執(zhí)行一次或多次。 - lambda表達(dá)式的語法
另外寫一系列關(guān)于Java8新特性的博客出來。 - 再談Comparator
可以使用lambda表達(dá)式來引用該接口中的靜態(tài)比較器
內(nèi)部類
內(nèi)部類是定義在另一個類中的類。
為什么需要內(nèi)部類呢?
- 內(nèi)部方法可以訪問該類定義所在的作用域中的數(shù)據(jù),包括私有數(shù)據(jù)。
- 內(nèi)部類可以對同一個包中的其他類隱藏起來。
- 當(dāng)想要定義一個回調(diào)函數(shù)且不想編寫大量代碼時,使用匿名內(nèi)部類比較便捷。
- 使用內(nèi)部類訪問對象狀態(tài)
內(nèi)部類既可以訪問自身的數(shù)據(jù)域,也可以訪問創(chuàng)建它的外圍類對象的數(shù)據(jù)域
只有內(nèi)部類可以是私有類 - 內(nèi)部類的特殊語法規(guī)則
外圍類引用的語法:OuterClass.this
在外圍類的作用域之外,訪問內(nèi)部類的語法:OuterClass.InnerClass - 內(nèi)部類是否有用、必要和安全
- 局部內(nèi)部類
局部類定義在方法中。 局部類不能用public或private訪問說明符進(jìn)行聲明,它的訪問域被限定在聲明這個局部類的塊中。 - 由外部方法訪問變量
局部類還可以訪問局部變量。 不過那些局部變量必須為事實上的final。 - 匿名內(nèi)部類
創(chuàng)建一個類的對象,不命名,這種類稱為匿名內(nèi)部類。 - 靜態(tài)內(nèi)部類
使用static關(guān)鍵字修飾的內(nèi)部類,稱為靜態(tài)內(nèi)部類。
聲明在接口中的內(nèi)部類自動成為static和public類。
代理(動態(tài)代理)
利用動態(tài)代理可以在運(yùn)行時創(chuàng)建一個實現(xiàn)了一組給定接口的新類。
- 何時使用代理
假設(shè)有一個表示接口的Class對象(有可能只包含一個接口),它的確切類型在編譯時無法知道。 - 創(chuàng)建代理對象
要想創(chuàng)建一個代理對象,需要使用Proxy類的newProxyInstance方法。這個方法有三個參數(shù):
- 一個類加載器(class loader)
- 一個Class對象數(shù)組,每個元素都是需要實現(xiàn)的接口。
- 一個調(diào)用處理器
- 代理類的特性