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

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

關于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方法已經重寫為只接收Student類型的對象了,為什么它還能接收o.getId()返回的字符串類型值呢?

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

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

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

正在回答

3 回答

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

第一個例子里,你重寫的是Student類的compareTo()方法,那么當你用一個Student對象去調用這個方法時,執行的就是你Student里重寫的方法,這個你應該是明白的。那么看方法中間的代碼,

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

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

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

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

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

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

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

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

6 回復 有任何疑惑可以回復我~


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

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

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

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

無動于衷

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

舉報

0/150
提交
取消

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

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

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

公眾號

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