理解java的動態繫結 靜態繫結
阿新 • • 發佈:2018-11-07
- 在java中所有變數都是靜態繫結
- 在Java中方法只有static和final是靜態繫結,其餘全部是動態繫結
理解靜態繫結:
靜態繫結就是指在編譯時就已經確定是哪個類的物件呼叫的。
所以當出現一下語句時:
Parent parent=new Parent();
Parent parent=null;
parent.str;
這裡的str為Parent中的一個變數成員【即靜態繫結】,說明當parent被定義時,即為Parent類的物件時,就將這條語句確定了
進一步討論
Parent parent=new Parent(); 或者 Parent parent=null; Child child=new Child(); parent=child; parent.str
這裡的parent.str與先前的語句一樣,因為parent定義時就說Parnet類與之後指向child無關。
動態繫結:
即程式在執行時,才會確定呼叫的是哪個方法,這個時候就要看你呼叫的這個物件的指向了。
測試原始碼:
class Parent{ public String str="Parent"; public void prn(){ System.out.println(str);} public void prn1(){ System.out.println(str);} } public class Child extends Parent{ public String str="Child"; public void prn1(){ System.out.println(str);} public static void main(String[] args) { Parent parent=new Parent(); parent.prn1(); parent.prn(); System.out.println("------以下體現了動態繫結和靜態繫結--"); Child child=new Child(); child.prn1(); child.prn(); System.out.println(child.str); System.out.println("----以下體現了多型-----------------"); parent=child; parent.prn1(); parent.prn(); System.out.println(parent.str); System.out.println(); Parent parent1=null; parent1=child; parent1.prn1(); parent1.prn(); System.out.println(parent1.str); } }
執行結果