没有方法的静态绑定和动态绑定

Static binding and dynamic binding with no methods

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

问题如下:

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

YES/NO 顺便说一句,这不是我的答案。

我老师说答案是"no"因为它是静态绑定。

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

任何解释将不胜感激。

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

这是动态绑定,见the wikipedia article:

The binding of names before the program is run is called static (also "early"); bindings performed as the program runs are dynamic (also "late" or "virtual").

An example of a static binding is a direct C function call: the function referenced by the identifier cannot change at runtime.

But an example of dynamic binding is dynamic dispatch, as in a C++ virtual method call. Since the specific type of a polymorphic object is not known before runtime (in general), the executed function is dynamically bound.

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

没有。是动态绑定。

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