java 关注公众号没有调接口_高频面试题:接口和抽象类的区别
? ? ? ? 作為一個基礎(chǔ)的Java高頻面試題,是所有Java面試者必須爛熟于心的。當(dāng)然不能死記硬背,可以通過實(shí)際地寫幾個小demo,邊實(shí)際操作邊理解,既能感受到編程的快樂,更重要的是真的理解記住了二者的區(qū)別。
? ? ? 此外,本篇文章是在Java1.8的基礎(chǔ)上進(jìn)行講解的,網(wǎng)上一些文章,沒有說明Java版本,上來直接講一大堆知識,有的文章通篇講的是Java1.7或者更早的版本,容易誤導(dǎo)初學(xué)者,讓初學(xué)者以為Java1.7的區(qū)別就是Java1.8的區(qū)別,其實(shí),對于接口和抽象類的區(qū)別這個問題,1.8和1.7還是不一樣的。并且現(xiàn)在無論實(shí)際開發(fā)還是面試,都是基于Java1.8的。(在文章中也會穿插說下Java1.7相關(guān)內(nèi)容)
1、一個類只能繼承一個抽象類,但可以實(shí)現(xiàn)多個接口
? ? ? Java規(guī)定,一個類只能有一個父類。但是,對于這個父類而言,它可以有多個子類,也就是說,可以同時有多個類繼承同一個父類。一個類可以同時實(shí)現(xiàn)多個接口。
? ? ?特別注意的是,接口自己本身可以通過extends關(guān)鍵字?jǐn)U展多個接口。(類只能單繼承,但是接口可以多繼承) ?如圖:
2、接口方法默認(rèn)修飾符是 public,抽象方法可以有 public、protected 和 default 這些修飾符。
? ? ? 抽象方法就是為了被重寫所以不能使用 private 關(guān)鍵字修飾。
? ? ? 接口方法默認(rèn)修飾符是 public,jdk8中接口可以有默認(rèn)方法(default修飾)和靜態(tài)方法(static修飾)。
? ? ?"接口方法默認(rèn)修飾符是public"這句話,你可以在Intellij IDEA編輯器試一下,當(dāng)你在方法前加上public時,編輯器會有提示"對于接口方法而言,public是多余的"
3、接口沒有構(gòu)造方法,抽象類有構(gòu)造方法
? ? ? 接口中沒有構(gòu)造方法,因?yàn)榻涌谑莻€集合,并不是類。(官方定義:接口在java中是一個抽象類型,是抽象方法的集合。一個類通過繼承接口的方式,從而繼承接口的抽象方法。)雖然接口內(nèi)的方法都是抽象的(和抽象方法很像,沒有實(shí)現(xiàn),Java1.8中默認(rèn)方法和靜態(tài)方法可以有實(shí)現(xiàn))但是不需要abstract關(guān)鍵字。
? ? 抽象類有構(gòu)造方法,抽象類除了不能實(shí)例化對象之外,類的其它功能依然存在,成員變量、成員方法和構(gòu)造方法的訪問方式和普通類一樣。由于抽象類不能實(shí)例化對象,所以抽象類必須被繼承,才能被使用。
? ? (!!! ?PS:有人會問,既然抽象類不能實(shí)例化對象,那么抽象類的構(gòu)造方法沒有用處了? ? ?非也!
? ?在抽象類中可以有構(gòu)造方法,只是不能直接創(chuàng)建抽象類的實(shí)例對象,但實(shí)例化子類的時候,就會初始化父類,不管父類是不是抽象類都會調(diào)用父類的構(gòu)造方法,初始化一個類,先初始化父類。如下圖:
!!! )
4、實(shí)現(xiàn)方法的區(qū)別
? ? ?抽象類里面的抽象方法必須全部被子類實(shí)現(xiàn),如果子類不能全部實(shí)現(xiàn),那么子類必須也是抽象類。接口里面的方法也必須全部被子類實(shí)現(xiàn),如果子類不能實(shí)現(xiàn)那么子類必須是抽象類。
? ? 當(dāng)然,抽象類和接口的區(qū)別還有很多,就不再這里一一列舉了,櫻木會盡心盡力寫好每一篇文章,如果喜歡的話,請關(guān)注微信公眾號:櫻木樂趣編程
總結(jié)
以上是生活随笔為你收集整理的java 关注公众号没有调接口_高频面试题:接口和抽象类的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php-fpm中能实现数据库长连接吗
- 下一篇: 为什么会患子宫腺肌症