Java靜態系結和動態系結


將方法呼叫連線到方法體稱為繫結。

在java中有兩種型別的系結:

  • 靜態系結(也稱為早期系結)。
  • 動態系結(也稱為後期系結)。

了解型別

下面讓我們來了解範例的型別。

1. 變數有一個型別

每個變數都有一個型別,它可能是原始的和非原始的。

int data=30;

這裡的資料變數是一個int型別。

2. 參照有一個型別

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

2. 物件有一個型別

物件是特定的java類的範例,但它也是其超類的範例。

class Animal {
}

class Dog extends Animal {
    public static void main(String args[]) {
        Dog d1 = new Dog();
    }
}

這裡d1Dog類的一個範例,但它也是Animal的一個範例。

靜態系結

當編譯時(由編譯器)確定物件的型別時,它被稱為靜態系結。如果在類中有任何privatefinalstatic方法,則有靜態系結。

靜態系結的範例

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...

在上面的例子中,物件型別不能由編譯器決定,因為Dog的範例也是Animal的一個範例。編譯器不知道它的型別,只知道它的基礎類別型。