多态是什么 多态的本质
多态是什么 多态的本质我们知道面向对象编程的优势就是类和方法的重用,这种重复使用就是其面向对象程序设计中多态性的一个重要表现。多态性确切的含义是:同一类的对象在收到相同消息时,会得到不同的结果。而这个消息是不可预测的。多态,顾名思义,就是多
我们知道面向对象编程的优势就是类和方法的重用,这种重复使用就是其面向对象程序设计中多态性的一个重要表现。
多态性确切的含义是:同一类的对象在收到相同消息时,会得到不同的结果。而这个消息是不可预测的。多态,顾名思义,就是多种状态,也就是多种结果。
这里以Java为例,我们都知道Java是一种强类型语言,因此变量和函数的返回值是有状态的。
比如:要实现一个add方法的功能,其参数可能的情况有两个int型整数,两个float型浮点数,这就造成了返回值可能是整型也可能是浮点型。在这种情况下,add方法是有状态的,它有多种可能运行的结果。在实际使用时,编译器会自动匹配适合的那个方法,这就属于方法的重载概念。需要说明的是,方法的重载并不是面向对象里的东西,和多态也不是一个概念,但它的的确确属于多态性的一种表现方式。
多态性是一种通过多种状态或阶段描述相同对象的编程方式。它的真正意义在于:实际开发中,开发者只需要关心一个基类或接口的编程,而不必关心一个对象所属于的具体类。
多态的最直接判断方法就是:符合“同一类型,不同结果”的特征,一般就可以判断是多态。
至于多态是如何实现的?Java、C++、PHP、Python等不同类型的编程语言,在对多态性的实现策略是不一样的,但是,最终的实现无非就是去查表去判断。
这里我把面向对象程序设计中多态性特征做如下总结:
1、多态是指同一类对象在实际运行时的具体化表现。
2、弱类型语言在实现多态的时候比强类型语言更简单、更灵活。(如:PHP多态实现要比Java简单)
3、类型的转换不是多态。
4、如果子类和父类存在继承关系,但不存在血缘关系,因此子类无法向上转型为父类,从而失去多态最典型的特征。
5、多态的本质就是if.else,只不过实现的层级不同而已。
6、多态提高了编程代码的可读性且减少代码冗余。
面向对象程序设计中的多态性使得我们用更少的代码实现相同的方法,从而让编程过程变得简单。