版权声明:未经允许,随意转载,请附上本文链接谢谢(づ ̄3 ̄)づ╭❤~
http://blog.youkuaiyun.com/xiaoduan_/article/details/79334347
动态绑定机制
多态的实现是通过向上类型转换和动态绑定机制来完成,向上转型实现了将子类对象向上转型为父类类型,而动态绑定机制能够识别出对象转型前的类型,从而自动调用该类的方法,二者相辅相成
动态绑定:
绑定就是将一个方法调用同一个方法所在的类链接在一起就是绑定,绑定分为静态绑定和动态绑定两种。
静态绑定:在程序运行之前进行绑定(由编译器和链接程序完成的)也叫做前期绑定
动态绑定:在程序运行期间有JVM根据对象的类型自动判断该调用哪一个方法,也叫做后期绑定
静态绑定的例子:
如有一类Human,他派生三个之子类Chinese类、American类和British类、三个子类中都重写了父类的speak()方法,在测试类中用静态绑定的方法调用speak()
Chinese c = new Chinese();
c.speak();
American a = new American();
a.speak();
British b = new British();
b.speak();
这种调用方式是在代码里指定的,编译时编译器就知道c调用的是Chinese的speak()方法
动态绑定的例子:
如果我们在测试类中做如下改动
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方法,直到运行时才能确定,这就是动态绑定。