- 綁定: 将一個方法調用同一個方法主體關聯起來被稱作綁定。
- 前期綁定: 在程式執行前進行綁定,叫做前期綁定。
- 後期綁定: 在運作時根據對象的類型進行綁定,叫做後期綁定。後期綁定也叫做動态綁定或運作時綁定。
下面結合具體代碼講講後期綁定這件事兒:
/**
* @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的靈活性,因為在表演之前我并沒有對外說明具體用什麼樂器表演,我隻說了音樂家要演奏樂器,所如果今天音樂家有表演,但是鋼琴出了故障,那麼我還可以用吉他演奏。