黑马程序员技术交流社区

标题: 一个苹果是水果,但是一箱苹果不一定是一箱水果 [打印本页]

作者: 杨华    时间: 2011-9-22 13:05
标题: 一个苹果是水果,但是一箱苹果不一定是一箱水果
学习多态时听过这么一句话:一个苹果是水果,但是一箱苹果不一定是一箱水果
但是不是很理解,谁能给举个例子
作者: 匿名    时间: 2011-9-22 15:28
如果把一箱苹果当成一箱水果的话,就可以在list里装入各种不同的水果子类型,这样做是错误的

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

希望能帮到你
作者: 匿名    时间: 2011-9-23 00:38
没必要理解 ,说那话的人用得比喻不好
作者: 匿名    时间: 2011-9-23 09:43
这个可以用泛型解码?
一个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其他类型的的时候编译器就出错
                // 取出的时候也不用进行类型转换方便,也安全。
作者: 匿名    时间: 2011-9-25 00:55
还是不太明白,苹果一定是水果啊,但是水果不一定是苹果。
作者: 匿名    时间: 2011-9-25 10:19
标题: 回复 楼主 的帖子
感觉楼主说的有问题,应该是“一个苹果是水果,但是一箱水果不一定是一箱苹果”吧?
可能是你听错了,这是常识啊!不过也没必要太专研这个问题啊!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2