重写equal中的obj强转为Course问题

来源:6-1 学生选课---判断 List 中课程是否存在

qq_澡堂麦霸_0

2015-11-12 20:15

    if (!(obj instanceof Course))             
    return false;        
    Course course = (Course) obj;
    为什么已经判断了obj属于Course类型了还要进行强转?


写回答 关注

5回答

  • 天启之魂
    2015-11-12 23:09:51
    已采纳

    你表达清楚了 但是也说明了你没学清楚多态....

    当父类引用指向子类对象时,只能使用父类中的属性和方法,obj是Object类型的  这个类里面是没有name这个属性的,所以必须得强转之后才能使用name这个属性

    第二个Course course = obj 写法是错误的  这里面obj是Object类型,  子类不能直接指向父类对象所以必须加强转

    改为Course course = (Course) obj;

    菜鸟起飞点 回复qq_澡堂麦...

    问题一 多态:1引用的多态:a.父类的引用可以指向本类对象 b.父类引用可以指向一个子类对象 2方法的多态:a.创建本类对象时,调用的方法为本类方法 b.创建子类对象时,调用的方法为子类重写的方法或者是继承的方法(但不能调用子类独有的方法) 问题二:if (!(obj instanceof Course))这一句返回值为false所以判断为不是同一类型,此时需要类型强转,因为obj为Object类型所以要转换成Course类型,这样才能在下一步属性的比较中调用name属性

    2016-01-06 10:46:45

    共 4 条回复 >

  • bryan4it
    2016-01-08 19:15:16

    楼主可以这样想,如果传入的是Course的一个子类呢?当然也算是Course类的吧?但是此时要引用父类的属性,所以要强转,因为这里是形参,有很多种情况要考虑。

  • 此用户不存在或被删除
    2015-11-29 04:37:02

    obj传进来的时候不是Course类而是他的父类Objece类

    至于为什么要强转呢。因为父类不可以使用子类的属性!

  • 黄淘淘
    2015-11-20 14:54:07

      如果一个人是警察 你也知道他是警察了 一般是他要穿上警服 才去巡逻执法(不要说特殊情况了)

  • 天启之魂
    2015-11-12 22:33:04

    就是判断了obj是Course 才能够进行强转  instanceof 就是提前判断能否强转 

    sjzcf 回复qq_澡堂麦...

    obj不是course 将course提升为object 相当与任何格式的文件都可以放到文件夹中 文件夹包含course 但不是course 用的时候把course拿出来才能用

    2015-11-17 21:58:37

    共 2 条回复 >

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题