上一篇堆疊長發了這篇《Java 8 有多牛逼?打破一切你對介面的認知!》,幫助許多人解開了疑惑,還有讀者留言說兩者還有啥區別,故引發了此篇:

在我們面試時也會經常遇到面試官問抽象類和介面的區別是什么,大部人肯定會說:介面中的所有方法都是抽象的,抽象類中的方法除了抽象方法還可以寫實作方法,如果你還這樣回答那你就 OUT 啦,要跟上形式,
這個問題我在面試一個 39 歲的程式員時,他居然也沒回答上來,其實了解 Java 8 的同學應該都知道,Java 8 在介面中推出了默認方法、靜態方法,打破了介面只能寫抽象方法的傳統,如果你還不知道的可以點擊閱讀我之前發的這篇文章,
既然介面都能寫實作方法了,那么還要抽象類干嘛呢?Java 8 中的介面和抽象類到底還有啥區別?大家是不是都有困惑?
所以,堆疊長這篇帶大家分析一下,不一定全,但希望對你有用,
區別1:
首先抽象類是一個“類”,而介面只是一個“介面”,兩者的概念和應用場景不一樣,這也是抽象類和介面的主要區別,
區別2:
即使在 Java 8 中介面也能寫實作方法了,但卻不能寫構造方法,而在抽象類是可以寫構造方法的,意味著抽象類是參與類的實體化程序的,而介面則不是,
區別3:
抽象類可以有自己的各種成員變數,并且可以通過自己的非抽象方法進行改變,而介面中的變數默認全是 public static final 修飾的,意味著都是常量,并且不能被自己和外部修改,
區別4:
介面可以實作多繼承,而抽象類只能單繼承,
下面我舉兩個例子:
public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable {
...
}
public interface Connection extends Wrapper, AutoCloseable {
...
}
類與類只能單繼承,而類與介面、介面與介面可以多繼承,

總結
Java 8 中的介面和抽象類的區別除了介面中可以寫實作方法之外這點變化,其他的還是保持不變的,
既然介面可以寫方法實作了,那么抽象類的存在貌似是榷訓了,因為類只能是單繼承,耦合性不好,而介面可以多實作,可以靈活擴展,也不會增加類的耦合性,
雖然說是少用繼承,多用組合的設計理念,但繼承的場景也還是存在的,比如我們常用的模板設計模式就是抽象類和各種模板的子類,所以說,介面也不能完全代替抽象類的,
你認為抽象類的應用場景還有哪些呢?歡迎留言分享!
最后,Java 系列教程還會繼續更新,關注Java技術堆疊公眾號第一時間推送,還可以在公眾號選單中獲取歷史 Java 教程,都是干貨,
近期熱文推薦:
1.Java 15 正式發布, 14 個新特性,重繪你的認知!!
2.終于靠開源專案弄到 IntelliJ IDEA 激活碼了,真香!
3.我用 Java 8 寫了一段邏輯,同事直呼看不懂,你試試看,,
4.吊打 Tomcat ,Undertow 性能很炸!!
5.《Java開發手冊(嵩山版)》最新發布,速速下載!
覺得不錯,別忘了隨手點贊+轉發哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/180080.html
標籤:其他
上一篇:認識原碼、反碼、補碼
下一篇:Java面向物件三大特性之多型
