Java8中的接口和抽象類的區別
- 2019 年 11 月 5 日
- 筆記
今天跑了好遠去面試,面試官問了上面這個問題,我是一臉懵比,抽象類我自己沒寫過,JAVA8對接口有什麼修改完全沒印象,現在來總結一下,至少下次再遇到這個問題要答上來。
- 簡單的說就是接口增加了一個默認方法,用default關鍵字標識,這個方法可以不被實現類覆蓋(那和抽象類有什麼區別?)
- 接口可以聲明靜態方法,且可以提供實現
其實這麼一搞,真的接口和抽象類的區別就越來越少了
相同點 |
不同點 |
---|---|
1.都是抽象類型 |
1.抽象類不可以多重繼承,接口可以(這個區別和之前是一樣的) |
2.都可以有實現方法(1.8之前的接口不行) |
2.設計理念的不同,抽象類是"is-a"關係,接口是"like-a"關係(和之前一樣) |
3.實現類都不需要實現所有方法(1.8之前接口需要) |
3.接口中的變量默認是public stafic final且必須賦值;抽象類中的變量是friendly的,子類中可以重定義重新賦值 |
區別確實挺小的
參考
https://my.oschina.net/benhaile/blog/176007
https://mp.weixin.qq.com/s/Kp8Ie1celN5DpKtZ26eOZA