我的大学里有一个关于面向对象编程的考试。其中一个问题是关于静态绑定和动态绑定。
问题如下:
Shape s; if(i==1) s = new Point(1,2); else s = new Rectange(10,20); //this is dynamic binding.
我的老师说答案是“不”,因为它是静态绑定。
我知道静态绑定和动态绑定只在我调用方法时才会发生。我阅读了所有StackOverflow问题以及关于此主题的大量博客文章,我能想到的唯一答案是动态绑定。
任何解释都将不胜感激。
答案 0 :(得分:3)
"结合"只是意味着你要将一个名称与一个对象相关联,所以这里有绑定。
这是动态绑定,请参阅the wikipedia article:
在程序运行之前绑定名称称为静态(也是"早期");程序运行时执行的绑定是动态的(也是"迟到"或"虚拟")。
静态绑定的一个示例是直接C函数调用:标识符引用的函数在运行时不能更改。
但动态绑定的一个例子是动态调度,就像在C ++虚方法调用中一样。由于在运行时(通常)之前不知道特定类型的多态对象,因此执行的函数是动态绑定的。
即使发布的代码通过设置i预先确定了设置的内容,但是这种动态的原因是调用s的方法将在运行时得到解决。
答案 1 :(得分:1)
没有。它的动态绑定。
在编译时不知道i变量的值。根据运行时i变量的值,已设置Shape。正如Nathan Hughes所建议的,调用Shape的方法在运行时被解析,这使得它的动态绑定延迟了。