在静态类型语言中,继承是多态的基础,多态是继承的目的。
通用多态:
参数多态:利用泛型编程,是发散式的,是静态绑定的,让相同的实现代码应用于不同的场合,看重的是算法的普适性
包含多态(子类型多态):利用OOP,是收敛式的,是动态绑定的,让不同的实现代码应用于相同的场合,看重的是接口与实现的分离度
通用多态的目的:在保证必要的类型安全的前提下,突破编译期间过于严苛的类型限制
对于既是静态类型语言又是静态语言、既支持OOP又支持GP的C++、Java和C#而言,多态机制是保证代码的灵活性、可维护性和可重用性的终极武器。
特殊多态:
一种是强制多态(coercion polymorphism),即一种类型的变量在作为参数传递时隐式转换成另一种类型,比如一个整型变量可以匹配浮点型变量的函数参数。
另一种就是重载多态(overloading polymorphism),它允许不同的函数或方法拥有相同的名字。
关于抽象的若干描述:
具体类型创造对象,抽象类型类型创造类型
C#和Java中抽象类型包括接口(interface)和抽象类(abstract class),这在C++中没有明显区别
可以抽象数据,也可以抽象类型(利用多态抽象)
抽象类型的两个特征:需要继承和无法实例化,这是特征而不是本质,本质上为“类型服务”