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

Patrick_DK 2001-12-20 11:27:52
...全文
307 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Patrick_DK 2001-12-21
  • 打赏
  • 举报
回复
那么运行期绑定和运行期动态绑定有什么区别啊?
ezyw 2001-12-21
  • 打赏
  • 举报
回复
在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;
hahaha88 2001-12-21
  • 打赏
  • 举报
回复
Java中的非final实例方法,相当于C++的虚函数
Java中的抽象方法(接口或抽象类中),相当于C++的纯虚函数

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

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


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

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

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

嘻嘻
Patrick_DK 2001-12-20
  • 打赏
  • 举报
回复
楼上的老大,翻译谁不会啊,详细说说啊,举个例子看看
网络咖啡 2001-12-20
  • 打赏
  • 举报
回复
楼上说的对!
wwangl 2001-12-20
  • 打赏
  • 举报
回复
个人理解:绑定/后期绑定/虚方法调用
Patrick_DK 2001-12-20
  • 打赏
  • 举报
回复
Binding和LateBinding是在运行时还是编译时啊?
Patrick_DK 2001-12-20
  • 打赏
  • 举报
回复
to 稻草人

那么怎么在继承树中查找合适的方法呢?是找最低级的类的方法吗?
contributor 2001-12-20
  • 打赏
  • 举报
回复
in java, all methods are virtual methods!
However, here is talking about overriding issue.
dcren 2001-12-20
  • 打赏
  • 举报
回复
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里面的抽象方法差不多。
必须对存在抽象方法的类继承然后实现此抽象方法。

给分吧,呵呵
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧