1

我在大学里参加了面向对象编程的考试。其中一个问题是关于静态绑定和动态绑定。

问题如下:

Shape s; if(i==1) s = new Point(1,2); else s = new Rectange(10,20); //this is dynamic binding.

是/否 在此处输入图像描述 ,顺便说一句,这不是我的答案。

我的老师说答案是“不”,因为它是静态绑定。

据我所知,静态绑定和动态绑定仅在我调用方法时发生。我阅读了有关此主题的所有 StackOverflow 问题和许多博客文章,我能想到的唯一答案是存在动态绑定

任何解释将不胜感激。

4

2 回答 2

3

“绑定”只是意味着您将名称与对象相关联,因此这里正在进行绑定。

这是动态绑定,请参阅维基百科文章

程序运行前的名称绑定称为静态(也称为“早期”);程序运行时执行的绑定是动态的(也是“延迟的”或“虚拟的”)。

静态绑定的一个示例是直接 C 函数调用:标识符引用的函数在运行时不能更改。

但是动态绑定的一个例子是动态调度,就像在 C++ 虚拟方法调用中一样。由于在运行前(通常)不知道多态对象的具体类型,因此执行的函数是动态绑定的。

即使发布的代码通过设置 i 预先确定了 s 的设置,但使这种动态化的原因是在 s 上调用的方法将在运行时得到解决。

于 2015-12-28T18:09:51.197 回答
1

不,这是动态绑定。

i 变量的值在编译时是未知的。根据运行时 i 变量的值,已设置 Shape。正如 Nathan Hughes 所建议的,在 Shape 上调用的方法在运行时解析,这使其成为后期动态绑定。

于 2015-12-28T18:43:38.870 回答