接口(Interface)與 回調(callback):Core Java 6.1

接口 interface

接口技術主要用來描述類有什麼功能,而並不給出每個功能的具體實現。

接口不是類,而是對類的一組需求描述,這些類要遵從接口描述的統一格式進行定義。

如果類遵從某個接口,那麼就履行這項服務。

例如:
方法Arrays :: sort(T [] elements ),可以對數組中的元素進行排序,
但要求類型T必須實現了接口方法Comparable<T> :: compareTo(T other)
此方法要求實現了此接口的類,必須根據業務需求,編碼實現對兩個對象進行對比,(根據排隊一般從矮到高的情況)如果返回方法1,則經過sort()方法排序後this對象排序在other對象後,如果返回-1,則t經過sort()方法排序後this對象排序在other前,如果返回0,則兩者相等,無所謂順序。

public class Employee implements Comparable<Employee>{
	
	private double salary;
	...
	public int compareTo(Employee other){
		return	Double.compare(salary, other.salary);
	}
}

接口語法規則

所有方法默認是public abstract的,無需主動聲明。

所有域都是public static final的常量,因此常量前也無需主動聲明這些修飾符。

不能有實例域。

接口方法可以有默認實現:default修飾即可。

可以有static方法,在JDK中,有些接口各自有一個伴隨類。伴隨類都是提供操作那些實現了接口的類對象的工具類,例如:Collection 與 Collections。
可以直接將伴隨類中的static方法定義在接口中,無需再定義一個伴隨類。

默認方法的意義:接口演化

接口演化(interface evolution),是指最初聲明接口的時候只聲明瞭一個方法,而且也定義了不少的類來實現了這個接口。隨着功能的優化,需要爲接口聲明新的方法。

此時如果接口不允許新方法爲默認方法,那麼已經存在的所有實現了這個接口的類,都必須進行源碼級別的修改和重新編譯部署。

但默認方法就可以解決接口演化中的問題,因爲接口方法有默認實現,那麼實現此接口的類就不是必須修改源碼去實現新聲明的接口方法。

默認方法的衝突問題

  1. 當類的超類和實現的接口中,有相同聲明的方法,並且都有實現時,遵循“類優先”原則,選擇超類的方法
  2. 當類實現的多個接口中,有相同聲明的方法,並且其中一個或以上的接口對於此方法有默認實現時,開發人員必須通過覆蓋這個方法進行處理。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章