面試官:你來說說抽象類和接口的區別

面試官:你來說說抽象類和接口的區別


無論你是新手Java 程序員,還是老手程序員,可能在實際開發中很少自己寫抽象類。

但是抽象類在某些時候的功能很強大,可以保證子類中百分百實現父類中的方法 —— 普通類的弊端,消除子類的冗餘代碼 —— 接口的弊端

一、抽象類

1、什麼是抽象類?

在面向對象的概念中,所有的對象都是通過類來描繪的,但是反過來,並不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。

2、抽象類不能被實例化

抽象類不能被實例化 (初學者很容易犯的錯),如果被實例化,就會報錯,編譯無法通過。只有抽象類的非抽象子類可以創建對象。

面試官:你來說說抽象類和接口的區別

面試官:你來說說抽象類和接口的區別

3、繼承抽象類

面試官:你來說說抽象類和接口的區別

輸出結果:

面試官:你來說說抽象類和接口的區別

4、抽象方法

如果你想設計這樣一個類,該類包含一個特別的成員方法,該方法的具體實現由它的子類確定,那麼你可以在父類中聲明該方法為抽象方法。

抽象方法:

抽象方法只包含一個方法名,而沒有方法體。

抽象方法沒有定義,方法名後面直接跟一個分號,而不是花括號。

面試官:你來說說抽象類和接口的區別

面試官:你來說說抽象類和接口的區別

輸出結果:

面試官:你來說說抽象類和接口的區別

5、抽象類特點

  • 抽象類不能被實例化 (初學者很容易犯的錯),如果被實例化,就會報錯,編譯無法通過。只有抽象類的非抽象子類可以創建對象。
  • 抽象類中不一定包含抽象方法,但是有抽象方法的類必定是抽象類。
  • 抽象類中的抽象方法只是聲明,不包含方法體,就是不給出方法的具體實現也就是方法的具體功能。
  • 構造方法,類方法(用 static 修飾的方法)不能聲明為抽象方法。
  • 抽象類的子類必須給出抽象類中的抽象方法的具體實現,除非該子類也是抽象類。

二、接口(Interface)

1、什麼接口?

官方解釋:Java 接口是一系列方法的聲明,是一些方法特徵的集合,一個接口只有方法的特徵沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。


接口是解決 Java 無法使用多繼承的一種手段,但是接口在實際中更多的作用是制定標準的。在 jdk1.8之前,接口裡全部是抽象方法和常量。


2、接口寫法

面試官:你來說說抽象類和接口的區別

2、接口的特點

  • 接口不能用於實例化對象。
  • 接口沒有構造方法。
  • 接口中所有的方法必須是抽象方法。
  • 接口不能包含成員變量,除了 static 和 final 變量。
  • 接口不是被類繼承了,而是要被類實現。
  • 接口支持多繼承。
  • 面試官:你來說說抽象類和接口的區別

    面試官:你來說說抽象類和接口的區別

    輸出結果:

    面試官:你來說說抽象類和接口的區別

    3、接口的繼承

    一個接口能繼承另一個接口,這和類之間的繼承比較相似。

    面試官:你來說說抽象類和接口的區別

    面試官:你來說說抽象類和接口的區別

    4、接口的多繼承

    在 Java 中,類的多繼承是不合法,但接口允許多繼承。

    在接口的多繼承中 extends 關鍵字只需要使用一次,在其後跟著繼承接口。


    public interface Football extends Sports,balls

    5、接口的實現

    ..implements 接口名稱 [, 其他接口名稱,其他接口名稱..., ...] ...


    JDK1.7 抽象類和接口的區別

  • 1. 抽象類中的方法可以有方法體,就是能實現方法的具體功能,但是接口中的方法不行。
  • 2. 抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是 public static final 類型的。
  • 3. 接口中不能含有靜態代碼塊以及靜態方法 (用 static 修飾的方法),而抽象類是可以有靜態代碼塊和靜態方法。
  • 4. 一個類只能繼承一個抽象類,而一個類卻可以實現多個接口。
  • JDK 1.8 接口新特性 (允許默認方法、靜態方法、靜態常量)


    分享到:


    相關文章: