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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 ysdolls 于 2014-8-3 22:12 编辑

ArrayList<Person> al = new ArrayList<Student>();为什么错误?
必须要两边一样啊?真的确实是多态呀。。。
老毕讲的 猪 动物 没听懂怎么办。。。
求帮忙指点下 哈

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 淡定

查看全部评分

11 个回复

倒序浏览
正确写法是 ArrayList<? extends Person> al = new ArrayList<Student>()
这里主要是认识到,ArrayList<Person> 和 ArrayList<Student>的关系。我觉得,关键在于,前者不是后者的基类,ArrayList<Student> 两个都是ArrayList类。
举个例子,比如Person有两个派生类Student和Teacher。定义 ArrayList<Student> arrS,它里面只能存放Student类和其派生类的对象。但是定义 ArrayList<Person> arrP,里面可以存放Person类和其派生类对象,包括Teacher类和Teacher类的派生类。

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 赞一个!

查看全部评分

回复 使用道具 举报
多态理解(武侠版)
http://bbs.itheima.com/thread-134671-1-1.html
(出处: 黑马程序员IT技术论坛)
可以参考我这个去理解一下!
回复 使用道具 举报
江苏孙浩 发表于 2014-8-3 21:35
正确写法是 ArrayList

亲,您说的这个我是了解的
我主要问的只是rrayList<Person> al = new ArrayList<Student>();为什么错误?
不改变代码 我想知道错在哪里了
回复 使用道具 举报
ysdolls 发表于 2014-8-3 21:45
亲,您说的这个我是了解的
我主要问的只是rrayList al = new ArrayList();为什么错误?
不改变代码 我想 ...

我猜你想说:一个装Person的容器应该可以装Student。
这是对的,但关键是这句话意味着什么。这句话的意思是你可以这样做:
  1. ArrayList<Person> al = new ArrayList<Person>();
  2. al.add(new Student());
复制代码

这叫用装Person的容器装Student

而ArrayList<Person> al = new ArrayList<Student>();的意思是:让一个引用装Person的容器的变量去操作(指向)一个装Student的容器,这显然是不合适的。就好比,一个管学生的老师,你可以让他管大学生、中学生、小学生,但你让他去管一个管中学生的老师,这就不对了吧

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 赞一个!

查看全部评分

回复 使用道具 举报
ysdolls 发表于 2014-8-3 21:45
亲,您说的这个我是了解的
我主要问的只是rrayList al = new ArrayList();为什么错误?
不改变代码 我想 ...

因为两者不是一个类型的List。但是两个都是List,他们也不是基类-派生类的关系。为什么能相互赋值呢。
就像Class<Person> 和 Class<Student> 能相互赋值吗?
回复 使用道具 举报
Peach2014 发表于 2014-8-3 21:44
多态理解(武侠版)
http://bbs.itheima.com/thread-134671-1-1.html
(出处: 黑马程序员IT技术论坛)

亲 ,你那个帖子讲的我都知道,可是谢谢你的帖子提醒了我
*Person per = new Student();
这个Person 不能用子类的特有方法
ArrayList<Person> al 中的al 可能调用 Student的方法吧,所以不可以这么写
回复 使用道具 举报
哦哦 懂了,谢谢亲们耐心解答了
回复 使用道具 举报
泛型有点忘了,不过泛型前后应该一致吧,多态可以吗?
回复 使用道具 举报
ysdolls 发表于 2014-8-3 21:45
亲,您说的这个我是了解的
我主要问的只是rrayList al = new ArrayList();为什么错误?
不改变代码 我想 ...

张孝祥高薪技术说到的泛型有讲到这个问题
回复 使用道具 举报
Person应该是父类吧,父类调用了子类导致错误
回复 使用道具 举报
我是来打酱油的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马