文章目錄
-
- 概念
- 舉例說明
概念
- 綁定:一個方法的調用與方法的所在類【方法主體】關聯起來
- 前期綁定:final、static、private、構造方法、成員變量【包括靜态及非靜态】
- 後期綁定:除了前期綁定之外的其他方法屬于後期綁定,運作時能判斷對象的類型進行綁定
注:為了執行後期綁定,Java 使用一小段特殊的代碼來替代絕對位址調用,這段代碼使用在對象中存儲的資訊來計算方法體的位址(過程在以後詳述),這樣,根據這一小段代碼的内容,每一個對象都可以具有不同的行為表現。是以,當向一個對象發送消息時,該對象就能知道對這條消息應該做些什麼
舉例說明
- Person【人類】
/**
* 描述:人類
*/
class Person{
protected String UNIQUE_FLAG = "Person";
/** 心 **/
private Heart heart;
public Person(){
System.out.println("Person created......");
};
public Person(String id,String name){
super(id,name);
}
public Person(String name){
super(name);
}
public Heart getHeart() {
return heart;
}
public void setHeart(Heart heart) {
this.heart = heart;
}
/**
* 描述:購買
* @param <E>
* @return
*/
public static <E> List<E> buy(E arg,int num){
return MagicStore.get(arg,num);
}
public static void birth(){
System.out.println("降臨人世間......");
}
public static void die(){
System.out.println("走向人間天堂......");
}
public void breath(){
System.out.println("Person" + "呼吸......");
}
}
- Boy【男孩】
/**
* 描述:男孩
*/
class Boy extends Person{
protected String UNIQUE_FLAG = "Boy";
/** 男孩的心 **/
private Heart heart;
public Boy(){
System.out.println("Boy created......");
}
public Boy(String name){
super(name);
}
Boy(String id,String name){
super(id, name);
}
public static void birth(){
System.out.println("Boy" + "降臨人世間......");
}
public static void die(){
System.out.println("Boy" + "走向人間天堂......");
}
@Override
public void breath(){
System.out.println("Boy" + "呼吸......");
}
}
- 測試類
public class AyTest {
public static void main(String[] args){
// 男孩産生,用 Person 引用,列印 1 和 2 結果
Person boy = new Boy();
// 男孩出生,由于 birth 是靜态方法,是前期綁定,是以調用 person 的 birth 方法
boy.birth();
// final 常量也是前期綁定,是以調用父類 Person 的 UNIQUE_FLAG 常量
System.out.println(boy.UNIQUE_FLAG);
// breath 是後期綁定,是以調用 boy 的 breath 方法
boy.breath();
// 編譯報錯,通路權限的原因
boy.heart;
}
}
- 列印結果
Person created...... 1
Boy created...... 2
降臨人世間...... 3
Person 4
Boy呼吸...... 5