在講解接口定義加強之前,首先看看分析一個實際問題。
當一個接口的子類經過發展后,形成眾多后代,如果此時發現接口中應該還有新加一個方法,此時怎么辦?
- 接口中新增一個方法聲明,然后所有子類粘貼無數次;
- 或者,如果所有的子類都使用了抽象類,那么就要對所有的子類考慮繼承關系。
造成這個尷尬局面的原因是:接口只是聲明了方法,而沒有具體的實現。隨著時間的推進,如果出現了上述問題,該接口就將作廢。
JDK8中為了解決上述問題,專門提供了兩類新的結構:
- 通過
default
定義普通方法,需要通過對象調用 - 使用
static
來定義普通方法,可以通過類名進行調用
接口上追加的新功能
接口上的新功能2
新功能的接口更加類似抽象類了,區別在于,接口依然可以實現多繼承,但是抽象類卻只能單繼承。
總結
- 最好不要在程序設計初期就進行接口定義加強的使用,這樣破壞了接口的設計規范;
- 接口定義加強是由于時間一長,許多支持出現問題時候,才提出的一種挽救性的操作,不屬于標準設計。