public class Problem {

    public static void main(String[] args) {

        List<? extends A> list;
List<SonA> list2 = new ArrayList<SonA>();
list = list2;
list.add(new SonA() //error
list2.add(new SonA());
A a=list.get(); }
} class A extends FatherA { } class SonA extends A { } class FatherA { }

由代码可知,? extend A表示list集合里面装的都是A的子类,因此arraylist中的对象只能存放A的子类,但是list.add(new SonA())编译时不可通过的.因为list中只是指定了一个范围,并没有特定一个类,所以不能使用add方法对list进行集合的add,会出现转换的错误。然而能使用get方法,因为集合中的类型都可以用父类A 来表示

 public static void main(String[] args) {

         List<? super A> list = new ArrayList<FatherA>();
// List<? super A> list=new ArrayList<SonA>(); error List<FatherA> list2 = new ArrayList<FatherA>();
list2.add(new FatherA());
list.add(new SonA());
// list.add(new FatherA()); error
Object o = list.get(0);
FatherA a = (FatherA) o; }
}

这就是 ?suepr A ,list集合中存放的是A的父类 所以能指向FatherA的arraylist,那为什么这里能使用add呢,因为list中都是A或A的父类,如果把A的子类添加进去是不影响的,因为这些子类都能用A或者A的父类来表示,能进行上转型。但是添加A的父类就不行了,因为互相之间不知道有什么联系,会出现类型错误。get的时候只能用超类Object表示,但是能进行向下转型。

其实,一个集合中只能用一个类型来表示,只要互相之间能转换就行。

最新文章

  1. [LeetCode] Count and Say 计数和读法
  2. [leetcode]leetcode初体验
  3. URL编码 utf-8 gb2312的区别
  4. c#接口容易被忽视的问题
  5. tfs 任务自定义项
  6. hdu 5752 Sqrt Bo
  7. Amoeba:开源的分布式数据库Porxy解决方案
  8. C语言运算符优先级表
  9. ASP.NET Web API Authorization using Tokens
  10. SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column &#39;dtdate&#39; 解决方法
  11. PHP 下载远程图片
  12. [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds...
  13. SSH实现无密码验证登录
  14. 孤儿文档是怎样产生的(MongoDB orphaned document)
  15. vue-cli3.0 使用postcss-plugin-px2rem(推荐)和 postcss-pxtorem(postcss-px2rem)自动转换px为rem 的配置方法;
  16. JavaScript eval
  17. 【2016.4.6】结对编程 终章 THE END
  18. golang xml parent node add attribute without struct
  19. zookeeper 图形化的客户端工具:ZooInspector
  20. 大数据领域两大最主流集群管理工具Ambari和Cloudera Manger

热门文章

  1. 网站搭建 (第06天) Ckeditor编辑器
  2. Tag
  3. windows服务安装,卸载
  4. vim编辑器-多行加注释与去注释
  5. IT - 偶像的力量
  6. ubuntu安装QGIS
  7. LeetCode--028--实现strStr() (java)
  8. java 获取微信公众号code为空
  9. Matlab - 各种函数学习
  10. SpringBoot整合Mybatis注解版---update出现org.apache.ibatis.binding.BindingException: Parameter &#39;XXX&#39; not found. Available parameters are [arg1, arg0, param1, param2]