应该是只有子类覆盖了父类VIRTUAL FUNCTION才会出现多态这种效果吧,在C++中如果子类覆盖了父类的一个NONE VIRTUAL FUNCTION,那结果还是不会搞出运行期绑定这种效果的。在JAVA中似乎所有的方法都是VIRTUAL,所以无论覆盖了什么方法都会有运行期绑定的效果,所以很多时候你不想运行期绑定也不行。所以多态形成的条件是
1。override supper class's virtual function
2. use the point or reference to supper class to make the method call.
各位谁可以描述一下JAVA的对象模型呢?
To do_do(do_do)
有点想法和你相同,有很多人好象把多态与虚函数或重载函数搞混了,多态应该是OO思想中的一部分,是人类对客观世界的一种抽象,比方说,我们要描述一部轿车(CAR),那么这部车即可被看做轿车(CAR),也可以被看做是车辆(VEHICLE),从OO述语来说,一个对象即是属于该对象类的一个实例,也是属于该对象类的众多基类的一个实例,这样我们可称为多态。但在实际情况中,某一个具体时刻,一个对象的状态是确定的,我们再以上面的例子,假设这样有这样一个类的继存关系(不是很严格,只是为了说明方便),
vehicle --- truck --- car
以上的继存关系中严格来说car不应是truck的子类,这里之所以这样只是为了说明方便。
现在的情况是我们得到一个对象,我们只知道它是一个车辆(vehicle),但不知它到底是truck还是car,但我们知道这三个类都有一个方法叫做“鸣笛”,我们也知道truck和car的鸣笛声是不一样的,于是我们就求助这个方法,邮于这个对象的状态是确定的,要么是truck,要么是car,(我们刚刚才说的,一个对象即是vehicle又是car,这是从逻辑关系上对客观事务的一种描述,实际情况是一个对象只能是某一具体类的实例),接下来,当我们求助这个方法时,就可以知道这个vehicle到底是truck还是car了。
To: alula
你好象反过来了。跳出C++才能较完整地看多态。
maguey_n(夕雨淋)总结得很好。
To: magicblue(小飞侠)
许多著名的C++书上都可以找到“compile-time polymorphism"你只要查一下它的index就可以找到。我不知道你说的“一般书”是哪些书。但“The C++ Programming Language"里有好几处谈到它。我说过The "Object-Oriented Software Engineering: A Use Case Driven Approach" by Ivar Jacobson有一节讨论相关议题(对不起,我把section打成session了。看来我的英文/打字也有待改进^_^)。我想这两本书应该是在OO和C++精进过程中的多数人都看的吧。