多态可以分为重载、改写、多态变量、泛型四种形式。
1、 重载(Overload)
是在一个类里面,方法名字相同,而参数(个数或者类型)不同。
通俗来讲,就是两个函数名相同而类型签名不同,他们之间构成重载关系。
但是要注意的是:返回类型可以相同也可以不同,即返回类型不能作为重载函数的区分。
示例代码:
A、public void function (**int a**) {…};
B、public void function (**int a,int b**) {…};
C、public void function(**string a**) {…};
A与B因为参数的个数不同而构成重载,A和C因为参数的类型不同而构成重载。
2、改写(Override/覆写/重写)
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。
通俗来讲,就是在层次关系中低层次对高层次中相同类型签名的函数进行重新定义。
示例代码:
Class Parent{
…
public int function(int x){return x;}
}
Class Child extends Parent{
…
public int function(int x){return 100000*x;}
}
Child类对parent类的function()函数进行了改写。
3、 多态变量
指可以引用多种对象类型的变量。这种变量在程序执行过程可以包含不同类型的数值。对于动态类型语言,所有的变量都可能是多态的。对于静态类型语言,多态变量则是替换原则的具体表现。
通俗来讲,就是一个变量可以在不同时期具有不同的类型。
示例代码:
动态类型语言(以python为例):
A =10
A = ‘你好’#、A由原来的数值类型变成了字符串类型
静态类型语言(以Java的向上转型为例)
Class parent{
…
}
Class child extends parent{
…
}
Parent p = new child();
4、 泛型
泛型本质是指类型参数化。意思是允许在定义类、接口、方法时使用类型形参当使用时指定具体类型,所有使用该泛型参数的地方都被统一化,保证类型一致。
通俗来讲,就是声明一个模板,创建一个通用的工具。
示例代码:
template <typename T>
inline T const& Max (T const& a, T const& b) { return a < b ? b:a; }