java泛型和继承问题
先让我们看下这段代码:
Listls = new ArrayList (); // 1 List
第一行是合法,问题出现在第二行上,这里有个问题:List
好的,我们先假设第二行没问题,那我们再看看下面代码:
lo.add(new Object()); // 3 : lo是指向Object的集合,那么向里面放“Object”实例,是允许的。 String s = ls.get(0); // 4: 如果第二行成立,那么此时ls也是指向了“Object集合”的,但是ls的声明是“List(指向String集合)”,那么此时ls取出来的是Object呢?还是String?
第三行中,我们向 lo 插入一个 Object实例。那这时候的 ls 就不再是仅持有String类型的List集合了。当我们从 ls 里面取出一个对象赋值给String s 时,java会给我们一个警告!
所以在上面提出的问题,我们的java是不允许的(即:第二行编译时期就已经报错了)。回答是NO.