一、什么是多态
多态性是面向对象程序设计代码重用的重要机制之一,JAVA中通常将多态分为两大类(特定的(强制的、重载的)、通用的(包含的、参数的))。
1、强制的:一种隐式做类型转换的方法。
2、重载的:将一个标识符用作多个意义。
3、参数的:为不同类型的参数提供相同的操作。
· 4、包含的:类包含关系的抽象操作。
二、概念解释
1、强制的多态
强制的多态隐式地将参数按某种方式,转换成编译器认可的类型来避免错误。例如:
1.0+2.0
1.0+2
1.0+"2"
第一个表达式将两个double类型的操作数相加
第二个表达式将double类型数据和int类型数据相加,在JAVA中没有明确定义这种运算。这时编译器会自动将int转为double并做double型加法,避免抛出错误。
第三个表达式将double与String类型数据相加,在JAVA内部并未定义这样的操作,所以编译器自动将double转String类型,并做串联处理。
隐式的强制可以避免类型转换带来的麻烦,减少编译错误。
2、重载的多态
重载允许相同的方法或运算符拥有不同的意义,程序对运算符的重载依赖于编译器根据上下文做出的选择,虽然JAVA明确支撑重载,但是并不支持用户定义的操作符重载。JAVA支撑用户定义的函数重载。在一个类中可以有相同的名字和方法,这些方法可以有不同的意义。在这些重载的方法中必须满足参数数目不同、相同位置上的参数类型不同的条件。
3、参数的多态
参数多态允许把许多类型抽象成单一的表示。例如,在一个名为A的抽象类中,描述了一组具有同样特征的对象,提供了一个通用模板。我们可以通过指定一种类型以重用这个抽象类。这些参数可以是任何用户定义的类型,很多用户都可以使用这个抽象类,因此参数多态毫无疑问成了最强大的多态。Java的单根继承方式解决了部分问题,但没有发挥出参数多态的全部功能。
4、包含的多态
包含多态通过值的类型和集和的包含关系实现了多态的行为,在包括Java在内的众多面向对象语言中,包含关系是子类型的。所以Java的包含多态是子类型的多态。