亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

重寫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下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號