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