1. 程式人生 > >理解java的動態繫結 靜態繫結

理解java的動態繫結 靜態繫結

  1. 在java中所有變數都是靜態繫結
  2. 在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);		 
	}
}

執行結果
在這裡插入圖片描述