接口
- 接口的概念
接口使用interface關鍵字來定義晨抡。 接口中的所有方法自動地屬于public氛悬。 - 接口的特性
接口中的域將被自動設為public static final则剃。
接口可以多實現(xiàn),類不可以多繼承如捅。 - 接口與抽象類
初學時棍现,覺得抽象類和接口的區(qū)分程度不是大 - 靜態(tài)方法
在Java SE 8中,允許在接口中增加靜態(tài)方法 - 默認方法
可以為接口方法提供一個默認實現(xiàn)镜遣。必須用default修飾符標記這樣一個方法己肮。 - 解決默認方法沖突
1)超類優(yōu)先
2)接口沖突
接口示例
- 接口與回調
- Comparator接口
public interface Comparator<T> {
int compare(T first, T second);
}
- 對象克隆
Cloneable只是一個標記接口士袄,要實現(xiàn)clone()方法的類必須實現(xiàn)該接口。 默認是淺拷貝谎僻。
lambda表達式
- 為什么引入lambda表達式
lambda表達式是一個可傳遞的代碼塊娄柳,可以在以后執(zhí)行一次或多次。 - lambda表達式的語法
另外寫一系列關于Java8新特性的博客出來艘绍。 - 再談Comparator
可以使用lambda表達式來引用該接口中的靜態(tài)比較器
內部類
內部類是定義在另一個類中的類赤拒。
為什么需要內部類呢?
- 內部方法可以訪問該類定義所在的作用域中的數(shù)據(jù)诱鞠,包括私有數(shù)據(jù)挎挖。
- 內部類可以對同一個包中的其他類隱藏起來。
- 當想要定義一個回調函數(shù)且不想編寫大量代碼時航夺,使用匿名內部類比較便捷蕉朵。
- 使用內部類訪問對象狀態(tài)
內部類既可以訪問自身的數(shù)據(jù)域,也可以訪問創(chuàng)建它的外圍類對象的數(shù)據(jù)域
只有內部類可以是私有類 - 內部類的特殊語法規(guī)則
外圍類引用的語法:OuterClass.this
在外圍類的作用域之外阳掐,訪問內部類的語法:OuterClass.InnerClass - 內部類是否有用始衅、必要和安全
- 局部內部類
局部類定義在方法中。 局部類不能用public或private訪問說明符進行聲明缭保,它的訪問域被限定在聲明這個局部類的塊中觅闽。 - 由外部方法訪問變量
局部類還可以訪問局部變量。 不過那些局部變量必須為事實上的final涮俄。 - 匿名內部類
創(chuàng)建一個類的對象蛉拙,不命名,這種類稱為匿名內部類彻亲。 - 靜態(tài)內部類
使用static關鍵字修飾的內部類孕锄,稱為靜態(tài)內部類。
聲明在接口中的內部類自動成為static和public類苞尝。
代理(動態(tài)代理)
利用動態(tài)代理可以在運行時創(chuàng)建一個實現(xiàn)了一組給定接口的新類畸肆。
- 何時使用代理
假設有一個表示接口的Class對象(有可能只包含一個接口),它的確切類型在編譯時無法知道宙址。 - 創(chuàng)建代理對象
要想創(chuàng)建一個代理對象轴脐,需要使用Proxy類的newProxyInstance方法。這個方法有三個參數(shù):
- 一個類加載器(class loader)
- 一個Class對象數(shù)組抡砂,每個元素都是需要實現(xiàn)的接口大咱。
- 一個調用處理器
- 代理類的特性