集合:
下面的这段代码是无效的:
1 |
List<Apple> apples = ...; |
2 |
List<Fruit> fruits = apples; |
下面的同样也不允许:
2 |
List<Fruit> fruits = ...; |
为什么?一个苹果是一个水果,为什么一箱苹果不能是一箱水果?
在某些事情上,这种说法可以成立,但在类型(类)封装的状态和操作上不成立。如果把一箱苹果当成一箱水果会发生什么情况?
1 |
List<Apple> apples = ...; |
2 |
List<Fruit> fruits = apples; |
3 |
fruits.add( new Strawberry());
|
如果可以这样的话,我们就可以在list里装入各种不同的水果子类型,这是绝对不允许的。
另外一种方式会让你有更直观的理解:一箱水果不是一箱苹果,因为它有可能是一箱另外一种水果,比如草莓(子类型)。
数组:
2 |
Fruit[] fruits = apples; |
可是稍等一下!如果我们把前面的那个议论中暴露出的问题放在这里,我们仍然能够在一个apple类型的数组中加入strawberrie(草莓)对象:
1 |
Apple[] apples = new Apple[ 1 ];
|
2 |
Fruit[] fruits = apples; |
3 |
fruits[ 0 ] = new Strawberry();
|
这样写真的可以编译,但是在运行时抛出ArrayStoreException异常
分享到:
相关推荐
在C#中,泛型集合和数组是两种重要的数据组织方式,它们在处理和管理数据时发挥着核心作用。在本讨论中,我们将深入探讨这两个概念以及如何在实际场景中,如“老师找学生”的问题中,运用它们。 首先,让我们理解...
在.NET Framework中,C#提供了丰富的集合类和数组作为数据存储和管理的基础。数组是最基本的集合形式,它是一组具有相同类型的数据元素的集合,这些元素通过索引(下标)进行访问。数组的类型从`System.Array`类继承...
Java集合和数组是Java编程语言中的基础数据结构,它们用于存储和管理数据。数组是一种简单的数据结构,可以存储同类型的元素序列,而集合是Java集合框架的核心部分,提供了更高级的数据管理和操作功能。 ### 数组 ...
6. 泛型和数组(Arrays):由于Java的泛型是在运行时被擦除的,泛型和数组不能很好地混合使用。尝试创建泛型数组,如List[],会导致编译器错误。这是因为泛型信息的擦除会导致类型安全问题,而数组则需要在运行时...
JAVA 区分集合和数组 Java 中的集合和数组是两个不同的概念,它们之间有着明显的区别。了解它们之间的区别对于编程实践非常重要。 数组 数组是 Java 语言内置的数据类型,它是一个线性的序列,所有元素可以快速...
在C#编程语言中,`List<T>`是一个常用的泛型集合类,它继承自`Collection<T>`并实现了`IList<T>`接口,提供了丰富的操作数组元素的功能。`List<T>`集合是动态大小的,可以根据需要自动扩展其容量。在某些情况下,...
- 泛型集合不允许存储null(除了null是类的实例,如`List<Class<?>>`)。 6. 泛型和多态: - 泛型类的子类可以有自己的类型参数,但必须是父类类型参数的子类型,如`class MyArrayList<T> extends ArrayList<T>`...
本资源摘要信息涵盖了Java集合知识的多个方面,包括集合和数组的区别、Collection接口的方法、ArrayList和LinkedList的特点、队列的特点、泛型的使用等。 1. 集合和数组的区别 集合和数组是Java中两种常用的数据...
C# 泛型和数组在 C# 2.0 中,下限为零的一维数组自动实现 IList。这使您可以创建能够使用相同代码循环访问数组和其他集合类型的泛型方法。此技术主要对读取集合中的数据很有用。IList<T> 接口不能用于在数组中添加或...
其中包括基本概念+运算符+判断和循环+循环高级和数组+方法+综合练习+面向对象+面向对象综合训练+字符串+集合&学生管理系统+学生管理系统升级版+面向对象进阶(static&继承+多态+包&final&权限+抽象类&接口&内部类)+...
本文将深入探讨如何在C#中使用泛型和数组排序,并结合面向对象原则,尤其是ASP.NET和.NET框架中的相关概念。 首先,我们需要理解什么是泛型。在C#中,泛型允许我们定义类型参数化的类、接口和方法。这意味着在编写...
1. 变量与数据类型:C#中的变量是用来存储数据的容器,分为基本数据类型(如int、double、bool等)和引用数据类型(如类、接口和数组)。声明变量时需要指定其数据类型。 2. 控制流语句:包括条件语句(if-else)、...
- ArrayList和数组(Array)都实现了IList、ICollection和IEnumerable接口,可以通过索引访问元素。 - ArrayList与Array的主要区别在于:ArrayList的大小可变,支持批量操作,而Array大小固定;ArrayList是一维的...
数组的声明通常包括元素类型和数组变量名,如`string[] Mystr;`表示声明一个字符串类型的数组。数组的初始化则需要分配内存,例如`myInt = new int[7];`创建了一个能容纳7个整数的新数组。 Array类是.NET框架提供的...
xStream可以自动处理集合(List、Set等)和数组,将其转换为XML的元素列表。 **总结** xStream简化了Java对象与XML之间的转换,使得在处理XML数据时,开发者无需关注底层的XML构造细节。在Web Service接口对接时,...
声明数组时指定元素类型和数组长度,如`int[] numbers = new int[5]`。访问数组元素通过索引完成,如`int firstNumber = numbers[0]`。 3.3 枚举(Enumeration) 枚举是预定义一组命名常量的类型,方便编程。例如`...
在实际开发中,C#自.NET Framework 2.0引入了泛型集合,如List,它提供了更好的类型安全性和性能。List是ArrayList的一个更优替代品,它结合了数组的高效访问和ArrayList的动态大小调整。 总结来说,理解并掌握数组...