多态是面向对象编程中的重要特性之一。
多态特性的实现是不依赖具体语言的,每一种具体编程语言都会用自己的方式来实现多态特性。
我们在使用多态之前有必要深入了解多态的定义以及与其他编程特性的关系。
多态特性包括以下三种:
1.Ad hoc polymorphism(特殊多态)。
2.Parametric polymorphism(参数化多态)。
3.Subtype polymorphism or inclusion polymorphism(子类型多态、包含多态)。
以上的抽象概念我们不多讨论,让我们了解一下以上三种在java中是如何实现的。
1.特殊多态在java中使用重载(overload)的方式实现。简单的说就是通过在不改变函数名的前提下,改变函数的参数,改变函数的返回值,以使同名函数能执行多种功能。overload的技术在这里不展开讨论,本身也是面向对象编程的重要技术。
2.参数化多态在java中使用泛型(generics)的方式实现。泛型包括类型变量、泛型类、泛型接口、泛型方法。类型变量是后面三类的基础,即为某一类对象指定一类对象输入值,例如list<Integer>,这类对象常见于java中。使用到这种对象的类、接口、方法,就称为泛型类、泛型接口、泛型方法。
3.子类型多态在java中使用继承和实现的技术实现。例如List<Integer> list = Arraylist<Integer>().在子类型多态中,只要调用接口的方法就可以直接识别出接口的具体实现。
我们可以发现重载、泛型其实是多态的一部分,虽然我们经常并列提及这几种特性,但还是有必要分清这些概念的包含关系。这是进一步学习的基础。