集合2-8编程问题

集合2-8编程问题

import java.util.List;

import java.util.ArrayList;

public class EmployeeTest {

    public static void main(String[] args) {

//定义ArrayList对象

        Employee em1=new Employee(1,"张三",5000);

        Employee em2=new Employee(2,"李四",5500);

        Employee em3=new Employee(3,"赵六",4000);

        

        List list=new ArrayList();

        list.add(em1);

        list.add(em2);

        list.add(em3);

        

        System.out.println("员工姓名"+" "+"员工薪资");

        for(int i=0;i<list.size();i++){

            System.out.println(((Employee)(list.get(i))).getName()+"\t"+((Employee)(list.get(i))).getSalary());

        }

        //创建三个Employee类的对象

        

        //添加员工信息到ArrayList中

        

        //显示员工的姓名和薪资

}

}

老师,代码打完了,运行上没有什么问题。但是,我对这步:

  System.out.println(((Employee)(list.get(i))).getName()+"\t"+((Employee)(list.get(i))).getSalary());

里的强转一点都不明白,我完全是根据之前的课程照猫画虎硬记下来这么打的的。这不行,过两天肯定就忘了,因为根本不理解。老师,为什么不能写成list.get(i).getName()这种形式,我不懂啊。。。。。好头疼

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
好帮手慕酷酷 2019-08-14 13:56:22

同学你好,这里用简单的方式来讲解一下为什么需要进行强转,比如在森林里面有各种各样的动物,各种各样的动物们是一个集合,集合里面有动物猫、狗、兔子等等。如果我们想要抓其中一个动物,我们就需要知道抓的具体是什么动物,也就需要强制转换告诉大家要抓的是哪种动物,通过强制转换也就是可以让这个动物显现出具体是哪一种动物,才能抓到。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 鱼儿0001 #1
    老师,强制类型转换我懂,在多态里有讲过。父类引用指向子类实例,当想调用子类自己独有的方法时,引用所代表的对象满足类的实例特征如animal instanceof Cat,就可以强转。但是在2-8编程里,能具体讲一下吗?Employee的对象通过add方法存储到ArrayList里,为什么使用get(int index)方法调用回来时,Employee的对象就莫名其妙的成了Object类的对象?
    2019-08-14 14:17:34
  • 提问者 鱼儿0001 #2
    我是在这里不懂,不是说我不理解强转,而是我不清楚存进去的Employee的对象为什么调用时就变成了Object的对象?这里肯定有隐藏的向上转型、向下转型,老师你把这里给我分析一下,我就懂了
    2019-08-14 14:19:53
  • 提问者 鱼儿0001 #3
    老师,你看get(int index)的返回值是Object类的对象,这里为什么会返回Object类的对象,而不能直接返回原来类型Employee的对象呢?如果返回Object类的对象,这里实现了向上转型吗?老师具体讲讲,谢谢!
    2019-08-14 14:26:12
好帮手慕酷酷 2019-08-14 10:43:44

同学你好,

1、这里说List list=new ArrayList();创建的list对象没指定具体类型,是指得是list集合中对象的类型,没有显式的指定。在Java中规定,如果直接创建List list=new ArrayList();则默认list中的集合对象为Object类型。而在案例中,我们需要在集合中存放Employee类型的对象,所以这理需要强转。

2、为什么调用get(i)方法后,得到的是Object类的对象的问题:

我们可以在Eclipse将鼠标移到这个方法处,我们可以看到它返回的类型为Object类型哦~另外同学也可以这样想:由于直接创建List list=new ArrayList();则默认list中的集合对象为Object类型。所以当我们获取集合中的元素时,它的类型也就是Object类型了。

具体如图:

http://img1.sycdn.imooc.com//climg/5d5375010001633e09820345.jpg

同学也可以回顾一下,老师在“2-7案例:公告的添加和显示”中的10分20秒左右也有讲到哦~



  • 提问者 鱼儿0001 #1
    老师,你打的信息我完全看不懂。本来这里就是我最难理解的部分,你讲的又很。。。专业。要不这样,能不能换一个老师来讲解一下,不然以你的讲解方式,我是看不懂的,我学起来真的很焦急。谢谢!
    2019-08-14 10:51:21
好帮手慕酷酷 2019-08-13 14:40:26

同学你好,代码完成的很棒!这里需要进行强转的可以这样理解,List list=new ArrayList();创建的list对象没指定具体类型,所以在进行调用list.get(i)方法返回的是所有类的父类Object类型,而getName()方法方法为Employee类独有的方法,这里想要继续调用Employee类型的getName()方法,则需要将父类的对象强制转换为子类的对象。

在下一章的学习中,我们会接触到泛型,就可以避免强制转换问题哦~建议同学一步步继续跟着老师学习,解开困惑。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 鱼儿0001 #1
    老师,你的回复我没看懂,一头雾水。你说:List list=new ArrayList();创建的list对象没指定具体类型。list怎么没有指定具体类型,它指向的就是ArrayList类啊。为什么调用get(i)方法后,得到的是Object类的对象,我不理解。老师能再解释一下这里为什么要进行强转,谢谢!
    2019-08-14 10:02:45
  • BNXU 回复 提问者 鱼儿0001 #2
    这说明你前面步骤二没学懂,建议回去再回顾下,我觉得面向对象很重要,步骤二我也看了两遍了,我第一遍看的很浮躁,第二遍看的时候静下心来跟着老师的想法走,慢慢的就能理解了。
    2019-08-14 10:59:57
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师