1. 什么是多态?
- 多态(Polymorphism)简单解释就是以一个类为类型的变量接收其它类的实例,其中涉及到对象数据类型的自动转换(即向上转型)。
2. 泛型受限中,存在继承关系的泛型参数之间为什么不构成多态?
- 在泛型受限中,只是通过继承关系来限定兼容范围,且泛型参数本身只会影响对象底层存储的值,并不会对对象所属的数据类型产生作用,因此不具备构成多态的基础条件。
3. 举例说明
- 代码示例中,list1、list2、list3是并列关系,都是List接口变量指向实现类ArrayList的实例,因此构成了多态;并且它们的底层都是Object类型的数组,所以三个对象在本质上完全相同。
- 此处的泛型下限<? super Student>对兼容范围进行了限制,只能够兼容Student、Teenager、Person三个类别,不兼容FemaleStudent。
- 此外,泛型参数在此处起到的作用仅仅是限制录入数据的类型,但是无论传入的是Student类型的数据,还是Teenager类型的数据,在录入底层的Object类型数组后,都会被向上转型为Object类型的元素,因此list1、list2、list3的区别仅仅在于底层相同类型的数组中存储的具体的值不同。
4. 总结
-
多态:一个类型的变量接收另一个类的实例,涉及对象数据类型的转换(即“向上转型”);
- 泛型受限:仅限定兼容的范围。且泛型参数仅影响对象底层存储的值,不会影响对象本身的数据类型。