|
|
|
|
移动端

1.4.4 数组类型的兼容性

《数据结构与算法分析:Java语言描述(原书第3版)》第1章引论,在这一章, 我们阐述本书的目的和目标并简要复习离散数学以及程序设计的一些概念。本节为大家介绍数组类型的兼容性。

作者:冯舜玺/陈越 译来源:机械工业出版社|2016-04-13 10:47

技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战

1.4.4 数组类型的兼容性

语言设计中的困难之一是如何处理集合类型的继承问题。设Employee IS-A Person。那么, 这是不是也意味着数组Employee[] IS-A Person[]呢?换句话说, 如果一个例程接受Person[]作为参数, 那么我们能不能把Employee[]作为参数来传递呢?

乍一看, 该问题不值得一问, 似乎Employee[]就应该是和Person[]类型兼容的。然而, 这个问题却要比想象的复杂。假设除Employee外, 我们还有Student IS-A Person, 并设Employee[]是和Person[]类型兼容的。此时考虑下面两条赋值语句:


两句都编译, 而arr [0]实际上是引用一个Employee, 可是Student IS-NOT-A Employee。这样就产生了类型混乱。运行时系统(runtime system)(Java虚拟机—译者注)不能抛出ClassCastException异常, 因为不存在类型转换。

避免这种问题的最容易的方法是指定这些数组不是类型兼容的。可是, 在Java中数组却是类型兼容的。这叫作协变数组类型(covariant araay type)。每个数组都明了它所允许存储的对象的类型。如果将一个不兼容的类型插入到数组中, 那么虚拟机将抛出一个ArrayStoreException异常。

在较早版本的Java中是需要数组的协变性的, 否则在图1-8的第29行和第30行的调用将编译不了。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:342347198

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Windows Forms 编程实战

本书由浅入深地介绍Windows Forms编程的技巧和各种实用方法。本书先详细介绍了菜单、状态条、可复用类库、文件对话框、文本框、按钮、列表...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊