我们在使用数组,泛型集合的过程中不可避免的会碰到多态,或者说什么情况下能如何使用父数组引用子数组(集合、泛型)呢?
当元素为父类型的数组引用指向了元素为子类型的数组对象时,不可通过父类型的数组引用向集合加入除子类型及其下层级的之外的元素(可通过编译,运行过程出错)
?
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
相关文章
猜你喜欢
- ASP.NET本地开发时常见的配置错误及解决方法? 2025-06-10
- ASP.NET自助建站系统的数据库备份与恢复操作指南 2025-06-10
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
- 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
- 个人服务器网站搭建:如何选择适合自己的建站程序或框架? 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
2025-05-29 45
-
2025-06-04 41
-
2025-05-25 99
-
2025-05-25 52
-
2025-06-04 98
热门评论