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