天天看點

Java中關于綁定的那些概念

  • 綁定: 将一個方法調用同一個方法主體關聯起來被稱作綁定。
  • 前期綁定: 在程式執行前進行綁定,叫做前期綁定。
  • 後期綁定: 在運作時根據對象的類型進行綁定,叫做後期綁定。後期綁定也叫做動态綁定或運作時綁定。

下面結合具體代碼講講後期綁定這件事兒:

/**
 * @Description 樂器
 * @Author .Mark
 * @Date 2019年2月28日
 */
public class Instrument {
    // 演奏
    public void play() {
        System.out.println("Instrument play music.");
    }
}

/**
 * @Description 鋼琴
 * @Author .Mark
 * @Date 2019年2月28日
 */
public class Piano extends Instrument {
    // 演奏
    @Override
    public void play() {
        System.out.println("Piano play music.");
    }
}

/**
 * @Description 吉他
 * @Author .Mark
 * @Date 2019年2月28日
 */
public class Guitar extends Instrument {
    // 演奏
    @Override
    public void play() {
        System.out.println("Guitar play music.");
    }
}

/**
 * @Description 音樂家
 * @Author .Mark
 * @Date 2019年2月28日
 */
public class Musician {
    // 表演
    public void perform(Instrument instrument) {
        instrument.play();
    }
    
    public static void main(String[] args) {
        Musician musician = new Musician();
        musician.perform(new Instrument());
        musician.perform(new Piano());
        musician.perform(new Guitar());
    }
}

// output:
//		Instrument play music.
//		Piano play music.
//		Guitar play music.
           

我現在有一個父類Instrument,有兩個子類Piano、Guitar繼承自Instrument,并重寫了play方法。然後再建立一個Musician類,這個類有一個方法perform,入參是Instrument。

子類繼承父類,父類對外提供的接口,子類肯定都有。是以Musician類的perform方法能接受Instrument類型的入參,也可以接受Piano、Guitar類型的入參。

直到Musician的perform方法被調用,才能知道具體是誰在調用play方法,這個就是動态綁定了。

動态綁定依賴于多态,正是因為可以使用父類的引用指向子類的對象,是以在執行Musician類的perform方法時,我才可以根據入參去用Piano演奏、用Guitar演奏。這極大的增加了perform的靈活性,因為在表演之前我并沒有對外說明具體用什麼樂器表演,我隻說了音樂家要演奏樂器,所如果今天音樂家有表演,但是鋼琴出了故障,那麼我還可以用吉他演奏。