java数组、泛型、集合在多态中的使用及对比

本文主要介绍了java数组、泛型、集合在多态中的使用及对比。具有很好的参考价值,下面跟着小编一起来看下吧

我们在使用数组,泛型集合的过程中不可避免的会碰到多态,或者说什么情况下能如何使用父数组引用子数组(集合、泛型)呢?

数组在多态中的使用

元素为父类型的数组引用可指向元素为子类型的数组对象

当数组被调用时由当前引用确定数组元素的类型

当元素为父类型的数组引用指向了元素为子类型的数组对象时,不可通过父类型的数组引用向集合加入除子类型及其下层级的之外的元素(可通过编译,运行过程出错)

/*验证: *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 dogs = new ArrayList(); ArrayList 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 dogs = new ArrayList(); 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类型"); } }

集合在多态中的使用

集合可引用ArrayList集合

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...