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

网友投稿 163 2023-06-06


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类型KSNmGeDOoD");

}

}

泛型在多态中的使用

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类型");

}

}

集合在多态中的使用

当然List集合可引用ArrayList集合


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java中自定义异常详解及实例代码
下一篇:java 实现定时的方法及实例代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~