Java中的动态绑定机制

动态绑定机制

  多态的实现是通过向上类型转换和动态绑定机制来完成,向上转型实现了将子类对象向上转型为父类类型,而动态绑定机制能够识别出对象转型前的类型,从而自动调用该类的方法,二者相辅相成
动态绑定:
  绑定就是将一个方法调用同一个方法所在的类链接在一起就是绑定,绑定分为静态绑定和动态绑定两种。
静态绑定:在程序运行之前进行绑定(由编译器和链接程序完成的)也叫做前期绑定
动态绑定:在程序运行期间有JVM根据对象的类型自动判断该调用哪一个方法,也叫做后期绑定
静态绑定的例子:

  如有一类Human,他派生三个之子类Chinese类、American类和British类、三个子类中都重写了父类的speak()方法,在测试类中用静态绑定的方法调用speak()

1
2
3
4
5
6
Chinese c = new Chinese();
c.speak();
American a = new American();
a.speak();
British b = new British();
b.speak();

  这种调用方式是在代码里指定的,编译时编译器就知道c调用的是Chinese的speak()方法
动态绑定的例子:
如果我们在测试类中做如下改动

1
2
3
4
5
6
7
8
9
10
11
12
13
Human[] human = new Human[5];
int n;
for (int i = 0;i<human.length;i++){
n = (int)(Math,random()*3);
switch(n){
case 0:human[i]=new Chinese();break;
case 1:human[i]=new American();break;
case 2:human[i] = new British();break;
}
}
for(int i = 0;i<human.length;i++){
human[i].speak();
}

  此时Human类随机生成Chinese等类的对象,编译器不能根据代码直接确定调用哪一个类中的speak方法,直到运行时才能确定,这就是动态绑定。

-------------End Of This ArticleThank You For Reading-------------