1. 程式人生 > >abstract修飾符、介面interface

abstract修飾符、介面interface

三. abstract修飾符

            可用來修飾類和成員方法。
            . 用abstract修飾的類表示抽象類,抽象類不能例項化,即不允許建立抽象類
        本身的例項。沒有用abstract修飾的類稱為具體類,具體類可以被例項化。
            . 用abstract修飾的方法表示抽象方法,抽象方法沒有方法體。抽象方法用來
        描述系統具有什麼功能,但不提供具體的實現。
              沒有abstract修飾的方法稱為具體方法,具體方法具有方法體。
            
            語法規則;
            1) 抽象類中可以沒有抽象方法,但包含了抽象方法的類必須被定義為抽象類;
            2) 沒有抽象構造方法,也沒有抽象靜態方法;
            3) 抽象類中可以有非抽象的構造方法;
            4) 抽象類及抽象方法不能被final修飾符修飾。

            抽象類不允許例項化:思考原因?
        練習 AbstractTest.java
        四. 介面

            介面使用的目的:解決多重繼承問題;例如Fish類繼承Animal類,表明Fish是一種動物,
        但魚同樣也是一種食物,如何表示這種關係呢? 由於Java語言不支援一個類有多個直接的父類,
        因此無法用繼承關係來描述魚既是一種食物,又是一種動物,為了解決這一問題,
        Java語言引入介面型別,簡稱介面。一個類只能有一個直接的父類,但是可以實現多個介面。
        採用這種方式,Java語言對多繼承提供了有力的支援。

            1. 介面是抽象類的另外一種形式

               抽象類抽象到極致就是介面,抽象類可存在有方法體的方法,介面中的方法全部為抽象方法;

            2. 介面中的所有方法均是抽象方法, 預設都是public、abstract型別的;

               public interface A {
                      void method1();                //合法,預設為public、abstract型別
                      public abstract void method2();//合法,顯示宣告為public、abstract型別

            3. 介面中的成員變數預設都是public, static, final型別,必須被顯式初始化;
               public interface A {
                      int CONST = 1;                 //合法,CONST預設為public, static, final型別
                      public static final int OPAQUE = 1;  //合法,顯示宣告為public static final 型別
               }
 
            4. 介面中只能包含public, static, final型別成員變數和public、abstract型別的成員方法;
            5. 介面中沒有構造方法,不能被例項化。
            6. 一個類只能繼承一個直接的父類,但能實現多個介面。

            抽象類和介面比較:

            1. 相同點:
               a. 都不能被例項化;
               b. 都能包含抽象方法;
            2. 不同點;
               a. 抽象類中可以為部分方法提供預設的實現,從而避免子類中重複實現它們,
           提高程式碼的可重用性,而介面中只能包含抽象方法;
               b. 一個類只能繼承一個直接的父類,這個父類有可能是抽象類;
           但一個類可以實現多個介面,這是介面的優勢所在。