1. 程式人生 > >基礎篇——抽象類和介面的區別

基礎篇——抽象類和介面的區別

寫程式碼的四點:

     1.明確需求。要做什麼?

     2.分析思路。要怎麼做?(1,2,3……)

     3.確定步驟。每一個思路要用到哪些語句、方法和物件。

     4.程式碼實現。用具體的語言程式碼將思路實現出來。

學習新技術的四點:

     1.該技術是什麼?

     2.該技術有什麼特點?(使用需注意的方面)

     3.該技術怎麼使用?(寫Demo)

     4.該技術什麼時候用?(在Project中的使用場景 )

----------------------早計劃,早準備,早完成。------------------------

抽象類

        在面向物件的概念中,所有的物件都是通過類來描述的,但是反過來,並不是所有的類都是用來描述物件的,如果一個類中沒有包含足夠的資訊來描述一個具體的物件,這樣的類就是抽象類。抽象類除了不能例項化物件之外,類的其它功能依然存在,成員變數、成員方法、構造方法的訪問方式和普通類一樣。

        由於抽象類不能例項化物件,所以抽象類必須被繼承,才能使用。子類用extends來繼承抽象類,如果子類不是抽象類,則子類必須實現抽象類中的所有抽象方法,也可以實現抽象類中的非抽象方法。

        抽象類中可以沒有抽象方法,但是如果一個類裡有抽象方法,那麼這個類只能是抽象類。

/**
 * 水果的抽象類
 */
public abstract class FruitsAbstractActivity {
    //宣告變數
    public static final int num = 10;
    public static int max = 10;

    //抽象方法
    public abstract void eat() throws Exception;

    //非抽象方法
    public static void gift(){
        LogUtil.e("TAG", "水果當作禮物");
    }
}

介面(interface)

        在Java程式語言中是一個抽象型別,是抽象方法的集合,通常以interface來宣告。一個類通過繼承介面的方式,從而來繼承介面的抽象方法。解決了單繼承的侷限性問題。

        介面並不是類,類描述物件的屬性和方法,介面則包含類要實現的方法。除非實現介面的類是抽象類,否則該類要定義介面中的所有方法。介面無法被例項化,但是可以被實現。一個實現介面的類,必須實現介面內所描述的所有方法,否則必須宣告為抽象類。

用interface關鍵字宣告一個介面:

//檔名稱:Fruits.java
public interface Fruits {
    //宣告變數
    public static final int num = 10;

    //抽象方法
    public abstract void eat() throws Exception;
    public abstract void gift();
}

介面和抽象類的區別:

        1.介面中不能有建構函式,而抽象類中可以有建構函式;

        2.介面中的方法不能有方法體,而抽象類中的方法可以有方法體;

        3.介面中的成員變數只能是public static final型別的,而抽象類中的成員變數可以是

           各種型別的;

        4.介面中的方法全都是public  abstract的方法,如果省略修飾符,則預設的

            也是public abstract修飾,抽象類中的方法可以被public、protected等修飾符修飾。

        5.介面中不能包含靜態程式碼塊和靜態方法,而抽象類可以包含靜態程式碼塊和靜態方法;

        6.一個類可以實現多個介面,而一個類只能繼承一個抽象類;

        7.抽象類和介面都不能直接例項化,如果要例項化,抽象類變數必須指向實現所有抽象方法的子類物件,

           介面變數必須指向實現所有介面方法的類的物件。

抽象類和介面的使用:

介面主要用於模組與模組之間的呼叫,Java不支援多繼承,使用介面避免了單繼承的侷限性。

抽象類主要用於當做基礎類使用,即基類。如果不斷改變基本功能並且使用介面,那麼就需要改變所有實現了該介面的類,比較麻煩。