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里面的抽象方法差不多。
必须对存在抽象方法的类继承然后实现此抽象方法。给分吧,呵呵

解决方案 »

  1.   

    in java,  all methods are virtual methods!  
    However, here is talking about overriding issue.
      

  2.   

    Binding和LateBinding是在运行时还是编译时啊?
      

  3.   

    Java中的非final实例方法,相当于C++的虚函数
    Java中的抽象方法(接口或抽象类中),相当于C++的纯虚函数绑定相当于定位具体要执行的代码前期绑定就是编译时绑定/静态绑定,一般对overload而言
    后期绑定就是运行时绑定/动态绑定,一般对override而言
    [那么怎么在继承树中查找合适的方法呢?是找最低级的类的方法吗?]
    - 对于前期绑定中的各overload方法的参数判定,遵循楼上大侠总结的“非分叉树
      最低级类匹配原则”嘻嘻- 对于动态绑定好象不存在这个问题,因为动态绑定严格按照runtime-type来
      决定具体调用哪一个方法但是有一个例外,我在蹭饭时,需要绑定一个大款(不是傍大款!嘻嘻),这个时候,我
    是综合使用前期绑定和后期绑定者2种方法的,嘻嘻,具体算法如下:
     - 吃饭前先分析一下(前期绑定),选定绑定目标,我一般是用分治策略在脑海中进行
       快速排序(n*log2(n))
     - 吃饭后如果预先绑定目标溜走了,则马上进行后期绑定(不能耽误!)嘻嘻
      

  4.   

    在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;