JAVA中的动态绑定机制

本文介绍了面向对象编程中多态的实现原理,包括向上类型转换和动态绑定机制,并通过具体的例子对比了静态绑定与动态绑定的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版权声明:未经允许,随意转载,请附上本文链接谢谢(づ ̄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方法,直到运行时才能确定,这就是动态绑定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值