父類 Bird
public class Bird {
public void move(){
System.out.println("this is bird class move method ... ");
}
}
子類 Goose
public class Goose extends Bird {
@Override
public void move() {
System.out.println("this is Goose class move method ... ");
}
}
子類 Penguin
public class Penguin extends Bird {
@Override
public void move() {
System.out.println("this is Penguin class move method ... ");
}
}
調(diào)用類弓坞,參數(shù)類型為 Bird
public class BirdController {
public void reLocate(Bird bird) {
bird.move();
}
}
測(cè)試
public class Test {
public static void main(String[] args) {
/**
* 雖然 BirdController 中的 reLocate 方法的參數(shù)聲明的是必須傳入一個(gè) Bird 類型的對(duì)象。
* 但是其 Bird 類的兩個(gè)子類 Goose 和 Penguin 依然也可以傳入到該方法中嫂伞,并正確運(yùn)行展运。
* 面向?qū)ο蟪绦蛘Z言中使用了 "后期綁定" 這一概念顶别。
* 即在程序運(yùn)行時(shí)些阅,才能知道被調(diào)用方法的代碼在計(jì)算機(jī)中的地址。
* 與此同時(shí)舀寓,進(jìn)行參數(shù)和返回值的類型檢查胆数。
* 這種概念也成為 "動(dòng)態(tài)綁定"。
* 在 Java 中互墓,動(dòng)態(tài)綁定是自動(dòng)執(zhí)行的必尼。不需要人工干預(yù)。
* 如 C++ 中篡撵,需要借助 "virtual" 關(guān)鍵字來達(dá)到同樣的目的胰伍。
*/
BirdController controller = new BirdController();
Bird bird = new Bird();
Goose goose = new Goose();
Penguin penguin = new Penguin();
/**
* "goose"、"penguin" 均為 Bird 的子類對(duì)象酸休,但是卻可以自動(dòng)向上轉(zhuǎn)型為 Bird 對(duì)象骂租。
*/
controller.reLocate(bird);
controller.reLocate(goose);
controller.reLocate(penguin);
}
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者