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

Java靜態繫結和動態繫結

Java靜態繫結和動態繫結


將方法呼叫連線到方法體稱為繫結。也就是通過呼叫方法連線到具體的方法體。
Java兩種繫結模式
首先了解一下變數和型別
每個基本變數都會有個型別

int a =1;double b = 1;

這裡變數a的型別是int,b的變數是double型別
每一個變數也會有一個型別

class Dog {
    public static void main(String args[]) {
        Dog d1;// Here d1 is a type of Dog
    }
}

d1 的型別是Dog
當方法當編譯時(由編譯器)確定物件的型別時,它被稱為靜態繫結。如果在類中有任何private,final或static方法,則有靜態繫結。

靜態繫結

能由編譯器確定物件的型別時,它被稱為靜態繫結。如果在類中有任何private,final或static方法,則有靜態繫結,因為他們都不能被重寫。不存在多型。

class Dog {
    private void eat() {
        System.out.println("dog is eating...");
    }

    public static void main(String args[]) {
        Dog d1 = new Dog();
        d1.eat();
    }
}

動態繫結

當在執行時確定物件的型別時,它被稱為動態繫結。存在多型。

class Animal {
    void eat() {
        System.out.println("animal is eating...");
    }
}

class Dog extends Animal {
    void eat() {
        System.out.println("dog is eating...");
    }

    public static void main(String args[]) {
        Animal a = new Dog();
        a.eat();
    }
}
dog is eating...

這個由虛擬機器執行時,動態選擇執行的方法稱為動態繫結。而編譯器不能決定。