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

2025-05-29 0 97

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

数组多态中的使用

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

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

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26
/*验证:

*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<子类型>

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14
/*验证:

*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>

此类型集合可引用任何参数上继承、实现了参数类型(包括参数类型本身)的集合

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29
/*万用字符

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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持快网idc!

原文链接:http://www.cnblogs.com/zzzz76/p/6481333.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 java数组、泛型、集合在多态中的使用及对比 https://www.kuaiidc.com/118556.html

相关文章

发表评论
暂无评论