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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 芦子骐 中级黑马   /  2013-3-25 23:34  /  1429 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我想知道,泛型的上限是对父类的所有的子类兼容,而下限呢,是多子类所继承的父类兼容,那么一个子类只有一个父类,这样不也就是两种类型么,再有就是,如果对父类兼容,那么父类的父类呢,还有父类的接口呢,这些都兼容么。求大神回答~~{:soso_e134:}

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-27 19:58

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

1 个回复

倒序浏览
本帖最后由 李辉 于 2013-3-26 06:51 编辑

一两句话讲不清楚,我说一下要点
1.类型参数是不支持向上转型的,比如List<Fruit> list=new ArrayList<Apple>() 是不行的,即使Apple是Fruit的子类。理解这一点很重要,因为这正是java提供通配符‘?’的原因。
2.理解第一条之后,要理解为什么java要提供通配符。比如eat()方法要接受 ArrayList<Apple>参数  或者 ArrayList<Orange>参数 或者 ArrayList<Fruit>参数,如果没有通配符机制,那就得重载三次。
3.指定上下限是为了在使用通配符的时候更安全。比如eat方法定义时规定参数类型为ArrayList<?>,那么我们就可以给eat方法传递ArrayList<Car>类型的参数,这在编译时期是没有问题的!因为语法本身没错,只是我们不能吃了小汽车!运行的时候才会出错。如果指定参数类型的上限Fruit,就可以在编译器检查出这个错误。指定下限的一个很好的例子就是比较器。

如果你理解了我上面写的三条,那你问的问题就迎刃而解。我在此就不解释了。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马