JAVA抽象類與接口的詳細解讀與示例


  

    接口存在的原因:

 

    JAVA是單繼承的,不支持多繼承,但是有了接口,JAVA可以實現多個接口;

    一個類要是實現某一個接口就必須實現接口內聲明的所有方法(強迫執行,即便是空方法,也要實現);

 

    接口特點:

 

   1.接口內所有方法只有聲明,沒有方法體(隱式聲明),例如:public abstract void func();

   2.接口內的所有變量都默認是public static final ,必須被顯示初始化;

   3.接口沒有構造方法,不能被實例化;

   4.實現接口的類要實現所有的抽象方法,否則該類就必須聲明為抽象類,加上 abstract關鍵字;

   5.接口不可以實現接口(所有接口都是抽象方法嘛),但是接口支持多繼承喲!

 

    那么有接口要抽象類做什么呢?

    首先我們認識一下抽象類

 

    1.抽象類內允許有一般變量和一般方法;

    2.抽象類必須有abstract關鍵字;

    3.抽象類里面可以沒有抽象方法,但是即便如此,也不能實例化;(有抽象方法的一定是抽象類)

    4.抽象類雖然不能被實例化,但是有構造方法(派生類可以擴展)

 

    好了那么說一說抽象類,怎么用呢,什么時候用抽象類???

 

    當有多個類實現同一個接口的時候,那么每個類都把那一個接口的所有方法實現了(如上文:實現接口,必須實現接口的所有方法);

    那么如果有幾個方法,在這幾個子類中的實現完全一樣,我們就可以用抽象類來把這些方法單獨拿出來作為公共方法;

    由抽象類來實現接口內,這些子類的公共方法(就是實現方式完全一樣的),然后這些子類只要繼承這個抽象類就OK了。

   

    那么接口和抽象類應用邏輯就出來了

    第一步,先寫一個接口,聲明實現這個接口應該要做的所有方法;

    第二步,這個接口的實現有公用的部分,用抽象類來實現,這樣抽象類里有所有方法的聲明,以及公共方法的實現,所以簡化了接口的實現

    第三步,派生類只要繼承並實現抽象類就OK!

    

    以上文字如果覺得,有點繞,那么請看代碼示例:

    先聲明一個接口

  public interface InterExample{// 聲明一個接口

         public abstract  void  function1();

         public abstract  void  function2();
  
         public abstract  void  function3();

         public abstract  void  pubFunct();  // 公用方法聲明

  }

 

  聲明抽象類,實現上面的接口

public abstract class AbsExample  implements InterExample{
      //  實現公用方法
      public void pubFunction(){
          System.out.println("這是派生類的公用方法");
      }//
}

 一般類(繼承了抽象類的派生類)

public class ExampleA extends AbsExample{
        public abstract  void  function1(){
            System.out.println("A派生類個性化使用的方法1");
        }

        public abstract  void  function2(){
            System.out.println("A派生類個性化使用的方法2");
        }
  
        public abstract  void  function3(){
            System.out.println("A派生類個性化使用的方法3");
        }
}

  

public class ExampleB extends AbsExample{
        public abstract  void  function1(){
            System.out.println("B派生類個性化使用的方法1");
        }

        public abstract  void  function2(){
            System.out.println("B派生類個性化使用的方法2");
        }
  
        public abstract  void  function3(){
            System.out.println("B派生類個性化使用的方法3");
        }
    
}

代碼里面看到:公共方法即:pubFunction(),在抽象類內實現了,ExampleA,ExampleB公用,沒有必要在ExampleA、ExampleB兩個類內分別各寫一遍相同的實現代碼了;

另外:如果增加子類ExampleC,pubFunction()的實現和ExampleA、ExampleB不同,那么只要在ExampleC內重寫一遍該方法就好,依然保持靈活。

 

重新整理的抽象類和接口,希望能為大家答疑解惑!

 

    

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM