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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 党传才 中级黑马   /  2012-3-27 11:18  /  1645 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

各位大师帮忙解决下面代码中提问的问题,小菜我将感激不尽!

import java.util.*;
public class Student  {
  
void func(List<? extends String> list){
list.add("huajielobn");        //为什么会报错?
list=new ArrayList<String>();  //为什么不报错?
list=new ArrayList<Object>(); //为什么会报错?
Object o=list;                //为什么不报错?
   
  }
     
}

2 个回复

倒序浏览
本帖最后由 田啸 于 2012-3-27 12:38 编辑

1. String类不能被继承,因为它是final的。 看下API中的定义:public final class String
2. List<? extends B> list ,这种用法中 ,list只能接收B类或者B类的子类:因此
  list=new ArrayList<String>();  不会报错
  list=new ArrayList<Object>(); //Object是 String的父类 所以会报错
3 Object o = list; 这里是向上转型, Object是所有类的父类,所以不会报错
                                                                                                        
回复 使用道具 举报
<? extends String>说明list的泛型是String或其子类,String 是final的,无子类,所以只能是String
任何对象都可当作Object
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马