当前位置:  技术问答>java相关

帮忙解释一下三个术语:binding/late binding/virtual method invocation

    来源: 互联网  发布时间:2015-03-06

    本文导语:  | binding:绑定,也可以说前期绑定,比如  System.out.println(s); 在编译过程中就绑定,并将代码拷贝到具体位置。 later binding:后期绑定,是面向对象实现多态的基本方法。 比如 abstract class Message {    abstract void pla...


|
binding:绑定,也可以说前期绑定,比如  System.out.println(s);
在编译过程中就绑定,并将代码拷贝到具体位置。

later binding:后期绑定,是面向对象实现多态的基本方法。
比如
abstract class Message
{
   abstract void play(ini t);
}

class TextMessage extends Message
{
   public void play(int t)
   {
     ......
   }
}
class VoiceMessage extends Message
{
  public void play(int t)
  {
    .....
   }
}

当使用一下代码时候:

Message a=new TextMessage();
Message b=new VoiceMessage();
a.play();
b.play();
编译器并不知道a,b调用的是父类还是子类的方法,所以这时候
动态绑定介入了,他在继承树中查找适合的方法,然后发出正确调用
从而实现了基本的多态。

3 virtual method invocation
虚方法调用,在java里面并不存在这种说法,C++,delphi提供了虚函数,纯虚函数
的概念.(采用一个VMT的虚方法表来动态控制调用的方法)
其实跟java里面的抽象方法差不多。
必须对存在抽象方法的类继承然后实现此抽象方法。

给分吧,呵呵

|
Java中的非final实例方法,相当于C++的虚函数
Java中的抽象方法(接口或抽象类中),相当于C++的纯虚函数

绑定相当于定位具体要执行的代码

前期绑定就是编译时绑定/静态绑定,一般对overload而言
后期绑定就是运行时绑定/动态绑定,一般对override而言


[那么怎么在继承树中查找合适的方法呢?是找最低级的类的方法吗?]
- 对于前期绑定中的各overload方法的参数判定,遵循楼上大侠总结的“非分叉树
  最低级类匹配原则”嘻嘻

- 对于动态绑定好象不存在这个问题,因为动态绑定严格按照runtime-type来
  决定具体调用哪一个方法

但是有一个例外,我在蹭饭时,需要绑定一个大款(不是傍大款!嘻嘻),这个时候,我
是综合使用前期绑定和后期绑定者2种方法的,嘻嘻,具体算法如下:
 - 吃饭前先分析一下(前期绑定),选定绑定目标,我一般是用分治策略在脑海中进行
   快速排序(n*log2(n))。。。
 - 吃饭后如果预先绑定目标溜走了,则马上进行后期绑定(不能耽误!)。。。

嘻嘻

|
在JAVA的SL275教程中有这个问题的讨论,很详细的,其实类的属性是编译其绑定,方法是运行期绑定。如下:
class Message
{
   
   public  void play(ini t);
   {
       System.out.println(t);
   }
}

class TextMessage extends Message
{]
  public int i;
  public void play(int t)
  {
    ......
  }
}
class VoiceMessage extends Message
{
  public int i;
  public void play(int t)
  {
    .....
  }
}

当使用一下代码时候:

Message a=new TextMessage();
Message b=new VoiceMessage();
a.i=3//错误,编译时绑定,message中无i属性
a.play();//运行其绑定,调用的是textmessage的play,而非message的play;
b.play();//运行其绑定,调用的是textmessage的play,而非message的play;

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 努力努力再努力,帮忙帮忙来帮忙!
  • 在servlet中有一个关于单引号输出的问题,请大家帮忙,帮忙,帮帮忙!!
  • 小问题,你一定能够帮忙!——菜鸟请求帮忙!!
  • 帮忙帮忙如何设置变量pathclass
  • 没人帮忙吗?我想用JAVA编一个像WINDOW中的画图软件,现在出现了如下问题,请各位老哥老姐帮帮忙
  • 帮帮忙!SCO OpenServer 5.0.5 的root用户口令丢了,怎么找回来啊,帮帮忙!!!!!!
  • 我用smartupload组件遇到问题了,请帮忙!!
  • webmail问题,请高手帮忙!!!谁会使用IMP 3.0????!!!
  • 脚本问题,帮忙
  • 高手帮忙解释
  • 求教求教,shell问题...各位大哥,帮忙下
  • 关于程序移植,请知道的帮忙,分会加的
  • DELL服务器,安装RedHat EAS3.0,装完了,连不上SSH。。。。。哪位大虾帮忙!!急啊 !!!!
  • 关于聊天室的若干疑问!!!请各位大虾帮忙!
  • 有个问题?请帮忙!
  • 请求各位帮忙,关于绘制图像
  • 关于全选的问题大家帮忙看看~
  • 帮忙找个工作。
  • 请帮忙推荐几个下载java电子书的网站,35分献上!
  • 我怎么不能编译servlet?请帮忙!!!谢谢!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3