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

时间:2015-12-28 17:56:27

标签: java dynamic-binding late-static-binding

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

问题如下:

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

是/否 enter image description here 这不是我的回答顺便说一句。

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

我知道静态绑定和动态绑定只在我调用方法时才会发生。我阅读了所有StackOverflow问题以及关于此主题的大量博客文章,我能想到的唯一答案是动态绑定

任何解释都将不胜感激。

2 个答案:

答案 0 :(得分:3)

"结合"只是意味着你要将一个名称与一个对象相关联,所以这里有绑定。

这是动态绑定,请参阅the wikipedia article

  

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

     

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

     

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

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

答案 1 :(得分:1)

没有。它的动态绑定。

在编译时不知道i变量的值。根据运行时i变量的值,已设置Shape。正如Nathan Hughes所建议的,调用Shape的方法在运行时被解析,这使得它的动态绑定延迟了。