1. 程式人生 > >理解介面和抽象類

理解介面和抽象類

1. 介面

1.1 介面的概述 

介面是功能的集合,介面只描述所應該具備的方法,並沒有具體的實現,具體的實現由介面的實現類來完成。

1.2 介面定義的格式

    Public interface 介面名{

      屬性(常量,值固定不變,不能修改)      

      方法(抽象方法)
        }

   屬性:public static final 資料型別 變數名 = 資料值;
   方法:public abstract 返回值型別  方法名(引數列表);

  介面中的成員都是固定格式!!!

1.3 類實現介面的方式

    Public class 類名 implements 介面名{

             重寫介面中的所有方法;
        }

1.4 介面的注意事項

  • 介面不能建立物件。
  • 介面中可以定義變數,固定修飾符 public static final,也可以叫做常量,值不變。
  • 介面中可以定義方法,固定修飾符 public abstract。
  • 介面沒有構造方法。
  • 介面與介面之間可以繼承,並且多繼承!使用extends關鍵字。

2. 抽象類

2.1 抽象類概述

犬的行為是吼叫和吃飯,緝毒犬的行為是吼叫、吃飯和緝毒,由於犬的種類很多,它們吼叫和吃飯的方式不一樣,在描述的時候不能具體化,也就是吼叫和吃飯的行為不明確;在描述行為的時候,行為的具體動作不能明確,這時可以將這個行為寫為抽象行為,那麼這個類也就是抽象類。在Java中,一個沒有方法體的方法應該定義為抽象方法,而類中如果有抽象方法,該類必須定義為抽象類。

2.2 抽象類特點

a:抽象類和抽象方法必須用abstract關鍵字修飾

      抽象類格式:       abstract class 類名 {}

      抽象方法格式:    public abstract 返回值型別 方法名();

b:抽象類不一定有抽象方法,有抽象方法的類一定是抽象類

c:抽象類中有構造方法,抽象類不能進行例項化,那麼要構造方法有什麼作用呢?

      用於子類訪問父類資料時的初始化。

d:抽象類不能例項化那麼,抽象類如何例項化呢?

      按照多型的方式,由具體的子類例項化。其實這也是多型的一種,抽象類多型。

e:抽象類的子類

      要麼是抽象類。

      要麼重寫抽象類中的所有抽象方法的具體類。

2.3 抽象類的成員特點

A:抽象類的成員特點

      a:成員變數:既可以是變數,也可以是常量。

      b:構造方法:有。

            用於子類訪問父類資料的初始化。

      c:成員方法:既可以是抽象的,也可以是非抽象的。

B:抽象類的成員方法特性
        a:抽象方法         強制要求子類做的事情。
        b:非抽象方法     子類繼承的事情,提高程式碼複用性。

3. 介面與抽象類的對比:

A:相同點

  • 都不能建立物件。
  • 都可以寫抽象方法。
  • 都可以被其他類繼承或實現。

B:區別

  • 抽象類中可以寫普通方法,但介面不可以寫,介面中只能包括抽象方法。
  • 抽象類中可以定義成員變數,介面中只能定義常量。
  • 抽象類有構造方法,(可以為成員變數初始化,也可以讓子類使用super呼叫),介面中沒有構造方法。

C:選用

  • 優先選用介面,儘量少使用抽象類。
  • 需要定義子類的行為,又要為子類提供共性功能時才選用抽象類。