- 在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);
}
}
运行结果