第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

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

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

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

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

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

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

正在回答

3 回答

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

第一個(gè)例子里,你重寫的是Student類的compareTo()方法,那么當(dāng)你用一個(gè)Student對(duì)象去調(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對(duì)象調(diào)用,一個(gè)是String對(duì)象調(diào)用,是調(diào)用他們各自的方法,你只是重寫了Student里面的compareTo()方法而已。

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

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

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

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

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

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

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


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

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í)伙伴

公眾號(hào)

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