A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

学习多态时听过这么一句话:一个苹果是水果,但是一箱苹果不一定是一箱水果
但是不是很理解,谁能给举个例子

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

7 个回复

倒序浏览
黑马网友  发表于 2011-9-22 15:28:57
沙发
如果把一箱苹果当成一箱水果的话,就可以在list里装入各种不同的水果子类型,这样做是错误的

因为 参数化类型是不考虑类型参数的继承关系的
Vector<String> v = new Vector<Object>();
错误!从编译器的角度看v 里面装的是String ,但是你如果这样写,那实际上内存里装的什么都有可能 相同的道理
你还可以这样理解   一箱水果不是一箱苹果,因为它有可能是一箱另外一种水果
Vector<Object> v = new Vector<String>();    也是错误的
就是说Vector可以装Object ,但是实际的类型只能装String

希望能帮到你

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-22 20:29:47
藤椅
小弟愚钝! 想来想去,总感觉楼主这句话无话理解,一个苹果你可以说是它是水果,难道一箱苹果你不可以说是一箱水果吗?想来想去,楼主可能要表达的是:
一个苹果是水果,但是一箱水果不一定是一箱苹果。

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-23 00:38:10
板凳
没必要理解 ,说那话的人用得比喻不好

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-23 09:43:33
报纸
这个可以用泛型解码?
一个String数据可以在集合里,但是集合里装的不全是String类型的
// 一个ArrayList数组里面add了各种类型的元素,像一个大杂烩。
                ArrayList collection = new ArrayList();
                collection.add(1);
                collection.add(1l);
                collection.add("abc");
                // 强行告诉编译,当做一个Internet对象来看待
                // int a = (Integer) collection.get(0);
                // System.out.println(a);
                // 明确说明指定ArrayList是String类型的,add其他类型的的时候编译器就出错
                // 取出的时候也不用进行类型转换方便,也安全。

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-25 00:55:53
地板
还是不太明白,苹果一定是水果啊,但是水果不一定是苹果。
回复 使用道具 举报
黑马网友  发表于 2011-9-25 10:19:23
7#

回复 楼主 的帖子

感觉楼主说的有问题,应该是“一个苹果是水果,但是一箱水果不一定是一箱苹果”吧?
可能是你听错了,这是常识啊!不过也没必要太专研这个问题啊!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马