时间:2021-05-19
我们在使用数组,泛型集合的过程中不可避免的会碰到多态,或者说什么情况下能如何使用父数组引用子数组(集合、泛型)呢?
数组在多态中的使用
元素为父类型的数组引用可指向元素为子类型的数组对象
当数组被调用时由当前引用确定数组元素的类型
当元素为父类型的数组引用指向了元素为子类型的数组对象时,不可通过父类型的数组引用向集合加入除子类型及其下层级的之外的元素(可通过编译,运行过程出错)
/*验证: *animals和dogs可以引用同一个数组 *当animals引用数组时,数组元素为Animal类型 *当dogs引用数组时,数组元素为Dog类型*/public class Animal{ private void showClass(){ System.out.println("数组元素为Animal类型"); } public static void main(String[] args){ //animals和dogs可以引用同一个数组 Dog[] dogs = {new Dog(), new Dog()}; Animal[] animals = dogs; //当animals引用数组时,数组元素为Animal类型 animals[0].showClass(); //当dogs引用数组时,数组元素为Dog类型 dogs[0].showClass(); //不可通过父类型的数组引用向集合加入除子类型及其下层级的之外的元素(可通过编译,运行过程出错) animals[0] = new Animal(); }}class Dog extends Animal{ public void showClass(){ System.out.println("数组元素为Dog类型"); }}泛型在多态中的使用
ArrayList<父类型>无法引用ArrayList<子类型>
/*验证: *animals无法引用dogs数组 **/import java.util.*;public class Animal{ public static void main(String[] args){ //animals无法引用dogs数组 ArrayList<Dog> dogs = new ArrayList<Dog>(); ArrayList<Animal> animals = dogs; }}class Dog extends Animal{}为了弥补泛型的缺陷,java引入了一种“万用字符”——ArrayList<? extends object>
此类型集合可引用任何参数上继承、实现了参数类型(包括参数类型本身)的集合
/*万用字符 *animals可以引用dogs集合 *当animals引用集合时,集合元素为Dog类型 *当dogs引用集合时,集合元素为Dog类型 *无法通过animals对集合进行修改 */import java.util.*;public class Animal{ public void showClass(){ System.out.println("集合元素为Animal类型"); } public static void main(String[] args){ //animals可以引用dogs数组 ArrayList<Dog> dogs = new ArrayList<Dog>(); dogs.add(new Dog()); ArrayList<? extends Animal> animals = dogs; //当animals引用集合时,集合元素为Dog类型 animals.get(0).showClass(); //当dogs引用集合时,集合元素为Dog类型 dogs.get(0).showClass(); //无法通过animals对集合进行修改(无法通过编译) //animals.add(new Dog()); }}class Dog extends Animal{ public void showClass(){ System.out.println("集合元素为Dog类型"); }}集合在多态中的使用
当然List<object>集合可引用ArrayList<object>集合
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
一、泛型概述1、背景在Java中增加泛型之前,泛型程序设计使用继承来实现的。坏处:需要进行强制类型转换可向集合中添加任意类型的对象,存在风险2、泛型的使用Lis
C#泛型和数组在C#2.0中,下限为零的一维数组自动实现IList。这使您可以创建能够使用相同代码循环访问数组和其他集合类型的泛型方法。此技术主要对读取集合中的
本文接上文“java反射之方法反射的基本操作方法”,利用反射了解下java集合中泛型的本质1、初始化两个集合,一个使用泛型,一个不使用ArrayListlist
Java中泛型使用泛型作用:泛型:集合类添加对象不用强转反射机制:将泛型固定的类的所有方法和成员全部显示出来核心代码:ArrayListff=newArrayL
一、Java中集合 Java中集合类是Java编程中使用最频繁、最方便的类。集合类作为容器类可以存储任何类型的数据,当然也可以结合泛型存储指定的类型(不过泛型