问答详情
源自:6-1 学生选课---判断 List 中课程是否存在

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

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


提问者:qq_澡堂麦霸_0 2015-11-12 20:15

个回答

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

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

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

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

    改为Course course = (Course) obj;

  • 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 就是提前判断能否强转