栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Java】子类列表和父类列表能否互相赋值与添加

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Java】子类列表和父类列表能否互相赋值与添加

我们设置创建两个类,Person类和Teacher类,Teacher继承Person:

class Person {}
class Teacher extends Person {}

接下来我们创建对应对象的列表,并尝试互相赋值和添加,看下是否能够操作成功:

List persons = new ArrayList<>();
List teachers = new ArrayList<>();

// 1. 尝试将teachers列表赋值给persons
persons = teachers;

// 2. 尝试将persons列表复制给teachers
teachers = persons;

// 3. 尝试将teachers添加到persons
persons.addAll(teachers);

// 4. 尝试将persons添加到teachers
teachers.addAll(persons);

我们将上面的1-4理解为独立的操作,各个操作之间互相不影响。

下面我们来猜测上面哪些可以正常执行:

1. 尝试将teachers列表赋值给persons
该代码会直接无法编译报错,声明的是List,赋值的也需要是List,即使Teacher是Person的子类也不行。

2. 尝试将persons列表复制给teachers
该代码会直接无法编译报错,声明的是List,赋值的也需要是List,即使Teacher是Person的子类也不行。

以上两种告诉我们,列表在指定了明确的类型后,在尝试赋值的时候必须要和声明的类型保持一致,否则就会编译报错。那么,如果是添加呢?

3. 尝试将teachers添加到persons
该代码可以正常执行,由于Teacher是Person的子类,那么在判断类型时,可以直接将Teacher的实例看做是一个Person,这个是没有问题的。

4. 尝试将persons添加到teachers
该代码会直接无法编译报错,我们可以说老师是一个人,但不能说一个人是老师。从代码层面讲,teachers.addAll()接收的参数类型为Collection ,也就是只有Teacher的子类,才可以。

以上是针对父类和子类的列表相互赋值和相互添加的测试和讲解,写代码没犯过这个错误,但是考试的时候记不清细节吃过几次亏,写下来加强记忆。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/770478.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号