日期:2014-05-20  浏览次数:20723 次

求证动态绑定与多态的问题
小弟想确认下自己的理解是否正确:
  多态和动态绑定都是用于类这个类型的,不适用于基础数据类型(比如:add(1 ,3);调用add(double d,double c)这个方法应该不算是动态绑定对吧?)
  多态:必须包含继承、重写、父类引用指向子类对象,三者缺一不可;
  动态绑定:是指运行期间,根据具体情况运用最适合的方法,
我个人认为这两者的区别在于,动态绑定是在调用方法的时候,形参根据实参的具体类型来决定调入方法时传入的是什么类型的数据,决定真正传入的是什么类型的数据这个过程叫做动态绑定。
  多态则不同,比如多态可以是在初始化的时候,比如Calendar c = new GregorianCalendar这个也是多态,
  总之我觉得动态绑定只能算是多态的一部分,不过多态除了上面我说的这些,不知道是否还包括其它的类容。
谢谢!

------解决方案--------------------
我觉得多态就是 重载+重写.
动态绑定则仅仅是用于重写后.
呵呵,刚学JAVA一个月,就这么理解得了.
------解决方案--------------------
探讨

我觉得多态就是 重载+重写.
动态绑定则仅仅是用于重写后.
呵呵,刚学JAVA一个月,就这么理解得了.

------解决方案--------------------
有必要区分得太细么。。。只要是父类引用指向子类对象就是多态
返回类型与实际返回值 参数与实际传参类型 以及返回值传给父类引用等等涉及到的都可能存在多态
------解决方案--------------------
引用楼主:“我个人认为这两者的区别在于,动态绑定是在调用方法的时候,形参根据实参的具体类型来决定调入方法时传入的是什么类型的数据,决定真正传入的是什么类型的数据这个过程叫做动态绑定”
根据参数类型决定调用哪个方法属于编译器决策,是静态绑定。比如
void func(int i){}
void func(double d){}
func(5);编译器知道5是int类型,选择调用上面一个,这是静态绑定。

如下:
Object obj = new String("adfa");
obj.hashCode();
这里obj虽然是Object类型,但hashCode实际执行的是String类型的,这是动态绑定,运行时根据obj指向对象的实际类型绑定具体的方法。
------解决方案--------------------
多态:必须包含继承、重写、父类引用指向子类对象,三者缺一不可;
实现接口也是可以的嘛,
而且多态只是方法的多态,没有成员变量的多态。。。