Java抽象類&接口(intergace)到底有什麼區別

前言ide

一、在Java中 ,實現抽象類的機制有兩種:抽象類(abstract class)和接口(interface).測試

二、二者很是類似,甚至能夠相互能夠相互替換,所以不少的開發者對於兩者的選擇上很是的隨意,其實,兩者的開發區別仍是很大的。.net

目錄接口

一、知識儲備:抽象是什麼開發

二、抽象類的兩種實現方式get

抽象類示例class

// 定義1抽象動物類Animal,提供抽象方法 = cry()
public abstract class Animal {  
    public abstract void cry();  
}  方法

// 貓、狗 = 動物類的子類
// 因爲cry()爲抽象方法,因此Cat、Dog必需要實現cry()
public class Cat extends Animal{  im

    @Override  
    public void cry() {  
        System.out.println("貓叫:喵喵...");  
    }  
}  static

public class Dog extends Animal{  

    @Override  
    public void cry() {  
        System.out.println("狗叫:汪汪...");  
    }  

}  

// 測試
public class Test {  

    public static void main(String[] args) {  
        Animal a1 = new Cat();  
        Animal a2 = new Dog();  

        a1.cry();  
        a2.cry();  
    }  
}  

// 運行結果
貓叫:喵喵...  
狗叫:汪汪

三、接口

示例:

interface Demo{

void method1();

void method2();

}

class Test implements Demo{

void method1();

void method2();

}

4、兩者的區別

5、實例講解

下面的實例,能夠更好的去理解關於接口和抽象類的使用

5.1.需求描述:

需求一:有一類門,基本功能有開門和關門

需求二:有一類門,基於上面的需求增長了報警器功能。

5.2需求實現:該需求的實現方式有三種

 一、只使用抽象類  二、只使用接口  三、同時使用抽象類和接口

示例:

// 方案1:只使用抽象類
  abstract class Door{  
      abstract void open();  
      abstract void close();  
      abstract void alarm();  
  }  

  // 具體使用時
  class AlarmDoor extends Door {  
      void open(){}  
      void close(){}  
      void alarm(){}  
  } 

// 方案2:只使用接口
  interface Door{  
      void open();  
      void close();  
      void alarm();  
  }  

  // 具體使用時
  class AlarmDoor implements  Door {  
      void open(){}  
      void close(){}  
      void alarm(){}  
  } 


// 方案3:同時使用抽象類 & 接口
  // 對於需求1 = 抽象1類事物,即 使用抽象類
  abstract class Door{  
      abstract void open();  
      abstract void close();  
  }  

  // 對於需求2 = 抽象事物中的某個行爲, 即 使用 接口
  interface Alarm{  
      void alarm();  
  }  

  // 具體使用時   class AlarmDoor extends Door implements Alarm{         void open(){}         void close(){}         void alarm(){}     } 

相關文章
相關標籤/搜索