白话关于JAVA多态中的动态绑定

数据抽象,继承,多态是java的三大特征,可见理解多态对于学习java的重要性,多态不但能够改善代码的组织结构和可读性,还能够让程序更加的具有可拓展性。

那什么是绑定呢?绑定就是说:一个方法的调用与方法所在的类(方法主体)关联起来。简单的来说,我的理解是对象的引用指向的是哪个类,类的类型和方法是否相同,

静态绑定(前期绑定):即在程序执行前,即编译的时候已经实现了该 方法与所在类的绑定,像C就是静态绑定。具体过程就是执行这个方法,只要到这个类的方法表里拿出这个方法在内存里的地址,然后就可以执行了。java中只有static,final,private,和构造方法是静态绑定,其他的都属于动态绑定,而private的方法其实也是final方法(隐式),而构造方法其实是一个static方法(隐式),所以可以看出把方法声明为final,第一可以让他不被重写,第二也可以关闭它的动态绑定。


动态绑定(后期绑定):运行时根据对象的类型进行绑定,java中的大多数方法都是属于动态绑定,也就是实现多态的基础。java实现了后期绑定,则必须提供一些机制,可在运行期间判断对象的类型,并分别调用适当的方法。也就是说,编译的时候该方法不与所在类绑定,编译器此时依然不知道对象的类型,但方法调用机制能自己去调查,找到正确的方法主体。java里实现动态绑定的是JVM.


所谓的动态绑定,其实就是在子类中重写了父类中的方法,当父类引用指向子类对象的时候,调用的方法将不在被使用父类中的方法,取而代之的是子类中的方法。


例如:

/** 
* @author ZCH
* @date 2018年1月25日 上午10:49:00
*/
public class Persion {

public void run(){
System.out.println("人可以行走");
}
public void speak(){
System.err.println("父类说的话");

}
}

public class Sun extends Persion{
//重写了父类中的speak()方法
public void speak(){
System.err.println("子类说的话");
}

public static void main(String[] args) {
Persion persion=new Sun();
persion.run();
persion.speak();
}
}


以上是我对动态绑定的理解,有不对的地方请大家多多指教

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值