为了账号安全,请及时绑定邮箱和手机立即绑定

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

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


正在回答

5 回答

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

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

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

改为Course course = (Course) obj;

1 回复 有任何疑惑可以回复我~
#1

qq_澡堂麦霸_0 提问者

是啊,多态不是很明白,能否简单的说一下什么是多态,谢谢了!最后还有一个疑问,就是前面 if (!(obj instanceof Course))这一句不是判断了obj是Course类型的了,然后你又说obj是Object类型,这两点之间不是矛盾了吗?给我个解释,谢谢!感谢!
2015-11-13 回复 有任何疑惑可以回复我~
#2

天启之魂 回复 qq_澡堂麦霸_0 提问者

if (!(obj instanceof Course)) 这个只是判断了obj是否是从 Course 类型提升上来的 ,并不是判断obj是不是Course类型 如果为true,说明obj就是Course的一个实例提升到了Object来的,有了这个前提,你才能进行下面的强转动作
2015-11-13 回复 有任何疑惑可以回复我~
#3

会做梦的世界

当父类引用指向子类对象时,只能使用父类中的属性和方法。这句话是不是有一定的错误,因为子类中重写了父类的方法,也能调用该重写的方法,比如: class Animal{ public void eat(){ System.out.println("a"); } } class Dog extends Animal{ public void eat(){ System.out.println("b"); } } Animal child=new Dog(); child.eat(); 打印出来的是b啊,这算不算调用了子类的方法呢
2015-12-27 回复 有任何疑惑可以回复我~
#4

菜鸟起飞点 回复 qq_澡堂麦霸_0 提问者

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

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

1 回复 有任何疑惑可以回复我~

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

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

2 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

qq_澡堂麦霸_0 提问者

我的意思是,前面已经判断成功obj就是Course类型的了,为什么还要 Course course = (Course) obj;这一句,也就是说,老师下面写的this.name.equals(course.name)不是直接可以用this.name.equals(obj.name),为什么还要多写这一句?这一句不就多余了?再说了,如果要多加这一句,不是可以直接这么写 Course course = obj?为什么还要强转? 不知道我有没有表述清楚
2015-11-12 回复 有任何疑惑可以回复我~
#2

sjzcf 回复 qq_澡堂麦霸_0 提问者

obj不是course 将course提升为object 相当与任何格式的文件都可以放到文件夹中 文件夹包含course 但不是course 用的时候把course拿出来才能用
2015-11-17 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信