- 在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);
}
}
運作結果
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLysmaNNzYE50dRpHWwYUbiBnTzwEMW1mY1RzRapnTtxkb5ckYplTeMZTTINGMShUYfRHelRHLwEzX39GZhh2css2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3PHBlSuUjNyQTOxATMyATMxgTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)