微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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集合

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐