最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

關(guān)于comparable的compareTo()方法重寫和comparator的compare(Student o1, Student o2)方法重寫問題

http://img1.sycdn.imooc.com//55feea2b0001be9804860139.jpg

像這里,為了把Collections.sort改為按對象的ID來排序,所以重寫compareTo方法,并且用了this.getId().compareTo(o.getId()) 語句,我不懂的是,這里的compareTo方法已經(jīng)重寫為只接收Student類型的對象了,為什么它還能接收o.getId()返回的字符串類型值呢?

http://img1.sycdn.imooc.com//55feeb10000198eb04950128.jpg

但是對于comparator的compare方法重寫中,老師還是用comparable例子中compareTo那個(gè)語句比較并返回。但是我自己試了一下仿照compareTo那種形式用compare方法來判斷,如上圖示。這個(gè)時(shí)候編譯器報(bào)錯(cuò)了,說是只能接收Student類型的對象,不能接收字符串。

希望有前輩可以解答一下,為什么comparable的compareTo()方法示例中,明明定義了只接收Student對象,但是在return那里還是可以接受字符串。 而在comparator的compare()方法重寫示例中使用類似的思路寫就會報(bào)錯(cuò)呢?

正在回答

3 回答

首先你要了解Override的范圍!Overide只在當(dāng)前類或子類中生效!

第一個(gè)例子里,你重寫的是Student類的compareTo()方法,那么當(dāng)你用一個(gè)Student對象去調(diào)用這個(gè)方法時(shí),執(zhí)行的就是你Student里重寫的方法,這個(gè)你應(yīng)該是明白的。那么看方法中間的代碼,

return this.getId().compareTo(o.getId);這里的this.getId()是String類型的,而String類里的compareTo()方法并沒有重寫!它調(diào)用的是它自身的compareTo()方法(沒有重寫就是調(diào)用父類的)。

所以,第一個(gè)例子,同樣是compareTo()方法,一個(gè)是Student對象調(diào)用,一個(gè)是String對象調(diào)用,是調(diào)用他們各自的方法,你只是重寫了Student里面的compareTo()方法而已。

-----------------------------------------------------------------------------------------

第二個(gè)例子里,不知道你是重寫了那個(gè)類里的compare(),我就稱之為類Unknow。

你重寫的Unknow類里的compareTo()方法,他只能接受Student類型的兩個(gè)參數(shù),看一下方法里面與第一個(gè)例子有和不同:return compare(o1.getId(),o2.getId()),你沒有使用對象去調(diào)用,那么java里就是當(dāng)前對象(this),也就是Unknow的對象。就像你在一個(gè)類里一個(gè)方法里調(diào)用另一個(gè)方法,都是省略了this.的。

所以,都是Unknow對象去調(diào)用compare()方法,自然調(diào)用的是你重寫后的方法,只接受Student類型的參數(shù)。

-----------------------------------------------------------------------------------------

總而言之,你要去理解Override是怎么一回事,Overide是重寫父類里的方法,只在當(dāng)前類或子類中生效(具體就是當(dāng)你對象調(diào)用方法,或者類調(diào)用靜態(tài)方法),而對其他類中的同名方法并不影響。還有就是方法的調(diào)用,所有的方法,都是要由對象去調(diào)用的(當(dāng)然靜態(tài)方法用類即可調(diào)用),要弄清楚是哪個(gè)類型的對象去調(diào)用了方法(特別是像上面說的this,super隱藏了的情況)。

6 回復(fù) 有任何疑惑可以回復(fù)我~


首先可以知道compareTo這個(gè)方法的返回值是int 型,故return 這里是對兩個(gè)對象的比較而返回值 顯示了二者的大??;你明白了這些再按照人家說的去領(lǐng)會,會更容易

0 回復(fù) 有任何疑惑可以回復(fù)我~

聽了你的解釋,清晰很多了,非常感謝!

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

無動(dòng)于衷

不用謝,都是同行哈。
2015-09-21 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消

關(guān)于comparable的compareTo()方法重寫和comparator的compare(Student o1, Student o2)方法重寫問題

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號