读书人

Polymorphism(多态)的了解

发布时间: 2012-11-06 14:07:00 作者: rapoo

Polymorphism(多态)的理解

? 多态也称为后期绑定(late binding),只要不是后期绑定就不是多态!

? 所谓绑定就是建立method call(函数调用)和method body(函数本体)的关联。绑定分为先期绑定和后期绑定,发生在程序执行之前的是先期绑定,过程式语言一定是先期绑定的;绑定动作在执行期才根据对象型别进行的是后期绑定。Java中的所有函数除了被声明为final和satatic外,皆为后期绑定,而且都是会自动发生的,可以这么理解“发送消息给某个对象,让该对象自行找到应该做的事就好了”。

? 显然可以推出成员变量和静态函数是不具有多态性的,因为它们在编译时绑定的。

? 说到多态我们不得不说两个概念 向上转型(upcasting)和向下转型(downcasting)

? 举个很简单的例子去理解多态? 向上转型? 向下转型

多????? 态:猫科动物有老虎?、狮子、猫等等

向上转型:老虎有猫科动物共有的特征(子类一定能转成父类类型)

向下转型:猫科动物不一定有老虎的本领(父类不一定能转成子类类型,有可能抛出异常)

Tiger WOWLion WOWCat WOWTiger is the king of the forest!Lion is the king of grassland!Cats is a human pet!

?? 注:Java里的每个转型动作都会被检查,所以即使看起来不过是圆括号表示的一般转型动作,执行时期却会加以检查以确保它的确是你所认知的型别,如果转型不成功,你便会受到ClassCastException,这一动作被称为“执行期型别辨别(run-time type identification,RTTI)。

读书人网 >软件架构设计

热点推荐