Java動態繫結與靜態繫結
阿新 • • 發佈:2019-01-31
Java動態繫結來自於繼承體現,子類繼承父類,子類重新覆蓋了父類的方法,就是動態繫結,以下舉例:
(動態繫結是在執行期間)
動物類:
/**
* 建立一個動物類
* @author Liudeli
*/
public class Animal {
/**
* 此函式列印一句話,顯示樣式
*/
public void showStyle() {
System.out.println("Animal showStyle()...");
}
}
人類:
/**
* 定義一個人類
* @author Liudeli
*/
public class Person extends Animal{
/**
* 重寫父類的 showStyle 方法
*/
public void showStyle() {
System.out.println("Person showStyle()...");
}
}
狗類:
/**
* 定義一個狗類
* @author Liudeli
*/
public class Dog extends Animal{
/**
* 重寫父類 showStyle 方法
*/
public void showStyle() {
System.out.println("Dog showStyle()...");
}
}
測試程式:
/**
* 測試程式
* @author Liudeli
*/
public class Main {
public static void main(String[] args) {
// 當父類引用去例項化子類,會執行子類中的方法,這個過程就是動態載入
Animal person = new Person();
person.showStyle();
Animal dog = new Dog();
dog.showStyle();
}
}
執行結果:
靜態繫結:
(靜態繫結是在編譯期間)
/**
* 定義動物類
* @author Liudeli
*/
class Animal {};
/**
* 定義人類繼承動物類
* @author Liudeli
*/
class Person extends Animal {};
/**
* 定義夠累繼承動物類
* @author Liudeli
*/
class Dog extends Animal {};
/**
* 此類包含了執行父類子類
* @author Liudeli
*/
public class MyRun {
public void showMethod(Animal animal) {
System.out.println("Animal showMethod()...");
}
/**
* 方法過載
* @param dog
*/
public void showMethod(Person person) {
System.out.println("Person showMethod()...");
}
/**
* 方法過載
* @param dog
*/
public void showMethod(Dog dog) {
System.out.println("Dog showMethod()...");
}
}
測試程式:
/**
* 測試程式
* @author Liudeli
*/
public class Main {
public static void main(String[] args) {
MyRun myRun = new MyRun();
myRun.showMethod(new Animal());
myRun.showMethod(new Dog());
myRun.showMethod(new Person());
}
}
執行結果:
其實在程式編譯的時候就決定會使用 showMethod(Animal animal) {}方法,不管在執行的時候傳入的實際物件是什麼,還是會執行 showMethod(Animal animal) {}方法,Java過載是靜態繫結的。
以上還有很多不足之處,還沒有來得及完善,謝謝大家觀看!!!!!!!