《Java編程思想》筆記9.接口


點擊進入個人博客

接口和內部類爲咱們提供了一種將接口與實現分離的更加結構化的方法。程序員

9.1抽象類和抽象方法

  • 抽象方法:這種方法是不完整的,僅有聲明而沒有方法。用abstract修飾的方法。
  • 抽象類:包含抽象方法的類叫作抽象類。若是一個類包含一個或多個抽象方法,該類必須被限定爲抽象的。用abstract修飾的類。
  • 能夠建立一個沒有抽象方法的抽象類。
  • 建立抽象類和抽象方法很是有用,由於他們能夠使累的抽象性明確起來,並告訴用戶和編譯器打算怎樣來使用它們。抽象類仍是頗有用的重構工具,由於它們使得咱們能夠很容易地將公共方法沿着繼承層次結構向上移動。

9.2 接口

  • interface關鍵字產生類一個徹底抽象的類(接口),它根本沒有任何具體實現。
  • 一個接口表示:全部實現了該特定接口的類看起來都像這樣。
  • 接口用於創建類於類之間的協議。
  • 接口中的域:默認是publicstaticfinal的。
  • 接口中的方法只能是public的,並且默認就是public的。

9.3 徹底解耦

  1. 複用代碼的第一種方式是客戶端程序員遵循該接口來編寫它們本身的類。

策略設計模式

更詳細的請看設計模式!!!算法

  • 根據所傳遞的參數對象的不一樣而具備不一樣行爲的方法。
  • 這類方法包含所要執行的算法中固定不變的部分,而「策略」包含變化的部分。
  • 策略就是傳遞進去的參數對象。
public class Test {
    static void process(Processor p) {
        p.process();
    }

    public static void main(String[] args) {
        Test.process(new Processor1());
        Test.process(new Processor2());
    }
}

interface Processor {
    void process();
}

class Processor1 implements Processor {
    public void process() {
        System.out.println("1");
    }
}

class Processor2 implements Processor {
    public void process() {
        System.out.println("2");
    }
}

適配器設計模式

  • 你常常會沒法修改你想使用的類,由於通常你是使用第三方的類庫。
  • 適配器模式把一個類的接口變換成客戶端所期待的另外一種接口,從而使本來因接口不匹配而沒法在一塊兒工做的兩個類可以在一塊兒工做。

9.4 Java中的多重繼承

  • Java最多隻能繼承一個類,可是能夠實現多個接口
  • 一個類能夠向上轉型成任何一個接口。

使用接口的緣由:設計模式

  1. 爲了可以向上轉型成爲多個基類類型。
  2. 與抽象類相同,防止客戶端程序員建立該類對象。

抽象類OR接口:ide

  1. 若是要建立不帶任何方法定義和成員變量的基類,那麼就應該選擇接口而不是抽象類。
  2. 事實上,若是知道某事物應該成爲一個基類,那麼第一選擇應該是使它成爲一個接口。

9.5 經過繼承來擴展接口

  • 接口能夠繼承其餘接口
  • 接口能夠一次性繼承多個其餘接口

9.5.1 組合接口時的名字衝突

  • 徹底相同的方法不會有問題
interface I1 { void f();}
interface I2 { int f(int i);}
interface I3 { int f();}

class C {
    int f() {
        return 0;
    }
}
// 兩個方法重載
class C2 implements I1, I2 {
    public void f() {

    }
    public int f(int i) {
        return 0;
    }
}
// 重載
class C3 extends C implements I2 {
    public int f(int i) {
        return 0;
    }
}
// 相同的方法沒問題,同時重寫兩個方法
class C4 extends C implements I3 {
    public int f() {
        return 4;
    }
}
// 此時是有問題的
class C5 extends C implements I1 {
}

9.6 適配接口

接口最吸引人的緣由之一就是容許同一個接口具備多個不一樣的具體實現。工具

9.7 接口中的域

  • 由於接口中的域是publicstaticfinal的,因此接口能夠用來建立常量組(儘可能避免這麼作!)。

9.7.1 初始化接口中的域

  1. 在接口中定義的域不能是空final,可是能夠被很是量表達式初始化。
  2. static代碼塊不能出如今接口中

9.8 嵌套接口

  • 接口能夠嵌套在類或其餘接口中。
  • 類內部的接口能夠有四種權限控制符。
  • 接口內部的接口能夠只能是public的。
  • 當實現某個接口時,不須要實現嵌套在其內部的任何接口。

9.9 接口與工廠

  • 接口是實現多重繼承的途徑,而生成遵循某個接口的對象的典型方法就是工廠方法
  • 這與直接調用構造器不一樣,咱們在工廠對象上調用的是建立方法,而該工廠對象將生成接口的某個實現的對象。

9.10 總結

優先使用類而不是接口!設計

相關文章
相關標籤/搜索