1. 程式人生 > >Java動態繫結與靜態繫結

Java動態繫結與靜態繫結

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過載是靜態繫結的。

以上還有很多不足之處,還沒有來得及完善,謝謝大家觀看!!!!!!!