Java 面向对象之多态 (Polymorphism)
多态是构造在封装和继承基础之上;多态(也称作动态绑定dynamic binding、后期绑定late binding或运行时绑定run-time binding)
子类就是父类(玫瑰是花,男人是人),因此多态的意思就是:父类型的引用可以指向子类的对象;
父类就是子类是错误的(花是玫瑰,人是男人都是不对的,别的花不认可,女人也不同意)
人们经常被Java语言中其他的非面向对象的特性所困扰,比如方法重载等,人们有时会被认为这些是面向对象的特性。但是不要被愚弄:如果不是晚绑定,就不是多态。
方法重载是早绑定,处于编译期间,在编译的时候java就知道其参数及类型等;而多态是晚绑定,就是在运行的时候才知道,而编译的时候是不知道的。
多态通过分离“做什么”和“怎么做”,从另一角度将接口和实现分离开来。多态不但能够改善代码的组织结构和可读性,还能够创建“可扩展的”程序,即无论在项目最初创建时,还是在需要添加新功能时,都可以进行扩充。
“封装”通过合并特征和行为来创建新的数据类型。“实现隐藏”则通过细节“私有化(private)”将接口和实现分离开来。这种类型的组织机制对那些有过程化程序设计背景的人来说,更容易理解。而多态的作用则是消除类型之间的耦合关系。我们已经知道继承允许将对象视为自己本身的类型或它的基类型进行处理。这种能力极为重要,因为它可以使多种类型(从同一基类导出而来的)被视为同一类型进行处理,而同一份代码也就可以毫无差别地运行在这些不同类型之上了。多态方法调用允许一种类型表现出与其他相似类型之间的区别,只要它们都是从同一基类导出而来的。这种区别是根据方法行为的不同来而表示出来的,虽然这些方法都可以通过同一个基类来调用。
原文地址:http://zlfwmm.blog.51cto.com/5892198/1689633