08- 抽象類和接口

抽象類和抽象方法

貓狗案例 - 貓和狗繼承了動物類

具體的類 和 抽象的類的區別
動物都有吃飯的方法 
動物都有睡覺的方法 

動物吃什麼
動物怎麼睡覺
	動物具體吃什麼 不知道(對於動物這個類而言,就是一個抽象的類)
	某一個具體的動物 吃什麼
		貓吃魚 狗吃骨頭 羊吃草 
		狗趴着睡 馬站着睡 
動物這個類的睡覺的方法必須由子類動物來實現, 本身不需要實現,把本身不需要實現的方法稱之爲抽象方法

抽象方法 本身不需要 有方法體的方法, 就是抽象方法, 該方法不需要實現,由子類繼承之後,重寫實現

抽象方法所在的類就是抽象類

文具類 (抽象類)
    筆
    本
    鉛筆刀
水果 (抽象類)
	蘋果
	梨
	山竹

抽象語法

public abstract class fruit{
   // 抽象方法 (沒有方法體 )
   public abstract void eat();
}

特點

  • 抽象類不能創建對象, 只能通過繼承關係, 由子類去創建父類對象
  • 子類繼承抽象類, 必須重寫父類的所有抽象方法, 除非子類也是抽象類

抽象類和抽象方法關係

抽象方法所在的類 必須是抽象類

抽象類 可以沒有抽象方法

有豪宅的人 一定是有錢人
有錢人 不一定有豪宅

抽象類中是擁有構造方法的

抽象類中可以 有普通屬性,和普通方法

構造是給屬性賦值使用的 , 抽象類有普通屬性, 所以有給這些屬性賦值的構造方法

接口

生活中的接口

鍵盤 鼠標 音響 U盤 是具有USB 功能的 設備

本身都具有自己的父類

鍵盤 繼承 鍵盤類 (外設類) USB的功能 使用接口來描述 (接口也是一個功能)

接口從某種角度上來講, 可以看做是一個特殊的抽象類,但是採用和抽象類完全不同的語法來表示, 兩者的設計理念不同!
接口是功能的拓展

語法

public interface 接口名{
    成員屬性;
    方法;
}

注意點

1- 和抽象類不同, 使用 interface 定義, 訪問修飾符 必須是public
2- 成員屬性必須是常量
-  成員方法必須是抽象方法
3- 實現接口使用 implements 來實現
4- 一個類可以實現多個接口

案例

// 定義USB 接口
public interface UsbInterface {
    // 常量 (默認修飾符 爲 public static final)
    double SIZE = 1.5;
    // 具體的執行流程
    // 成員方法必須是抽象方法 (默認修飾符 public abstract)
    void service();
}
public class UDisk implements UsbInterface{
    @Override
    public void service() {
        System.out.println("鏈接USB 接口 開始傳輸數據!");
    }
}
/**
 * USB  小風扇 實現了 USB的接口
 * 必須重寫 接口中的所有抽象方法
 */
public class UsbFan implements UsbInterface{

    @Override
    public void service() {
        System.out.println("鏈接USB 獲取電流 風扇開始轉動!");
    }
}
public class Demo {
    public static void main(String[] args) {
        // 使用父接口 來接收子類對象 , 也是多態的一種實現方式
        UsbInterface uDisk = new UDisk();
        uDisk.service();
        UsbInterface uFan = new UsbFan();
        uFan.service();
    }
}

接口與類之間的關係

接口和接口之間可以相互繼承

public interface A {
    void m1();
}
// 接口之間相互繼承
public interface B extends A{
}

接口與類之間, 多實現

public class C  implements A,B{}

在繼承的同時, 實現多個接口

public class D extends C implements A,B {}

類與類之間 相互繼承

接口和抽象類之間的對比

1- 接口是一個特殊的抽象類, 要比抽象類更抽象

2- 屬性和方法
抽象類中可以有非抽象方法, 可以有普通成員屬性
接口中 只有常量,抽象方法 

3- 構造
抽象類存在構造方法, 接口中沒有構造方法

4- 編程思想
抽象類 (is a) 是一個 - 貓繼承了動物類, 貓是一個動物
接口 (have a) 有什麼 - 鼠標實現了USB , 鼠標有USB的功能 (功能拓展)

5- 繼承與實現關係
抽象類 繼承關係, 只能單繼承
接口 實現關係, 支持子類多實現

案例

貓狗案例
動物
	貓
	狗
/***************************************/
動物
	會英語的貓
	不會英語的貓
	會英語的狗
	不會英語的狗

接口的優勢

  • 可擴展性
  • 避免單繼承的弊端

設計原則

  1. 摘取代碼中變化的行爲, 形成接口
  2. 多用組合, 少用繼承 (避免代碼冗餘)
  3. 針對接口編程, 不依賴於具體實現
  4. 開閉原則, 針對擴展開放,針對修改關閉
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章