java泛型和继承问题


先让我们看下这段代码:

List<String> ls = new ArrayList<String>(); // 1
List<Object> lo = ls; // 2 

第一行是合法,问题出现在第二行上,这里有个问题:List<String> 是 List<Object> 的子类吗?或者说它俩是可以直接等价的吗?,大多数人会回答说“当然了!”。

 

好的,我们先假设第二行没问题,那我们再看看下面代码:

lo.add(new Object()); // 3 : lo是指向Object的集合,那么向里面放“Object”实例,是允许的。
String s = ls.get(0); // 4: 如果第二行成立,那么此时ls也是指向了“Object集合”的,但是ls的声明是“List<String>(指向String集合)”,那么此时ls取出来的是Object呢?还是String?

第三行中,我们向 lo 插入一个 Object实例。那这时候的 ls 就不再是仅持有String类型的List集合了。当我们从 ls 里面取出一个对象赋值给String s 时,java会给我们一个警告!

所以在上面提出的问题,我们的java是不允许的(即:第二行编译时期就已经报错了)。回答是NO.


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM