基礎篇——抽象類和介面的區別
寫程式碼的四點:
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不支援多繼承,使用介面避免了單繼承的侷限性。
抽象類主要用於當做基礎類使用,即基類。如果不斷改變基本功能並且使用介面,那麼就需要改變所有實現了該介面的類,比較麻煩。