public?boolean?equals(Object?obj){
??????if(this==obj)
???????return?ture;
??????if(obj==null)
???????return?false;
??????if(getClass()!=obj.getClass())
???????return?false;
??????Dog?other=(Dog)?obj;
??????if(age!=other.age)
???????return?false;
???????return?ture;??
??}
??這段代碼看不懂,能幫我講下嗎?謝謝。
??著重問題:
??1、進行比較的后者是Dog?dog,為什么要用Object?obj呢?
??2、第六行if(getClass()!=obj.getClass())第一個getClass()前面不用加this嗎?
??3、由getClass()確定為相同類型后,obj轉換成Dog類,代碼:Dog?other=(Dog)?obj;還需要用other來代替obj嗎?那么創建Dog?other對象的代碼隱藏在哪里了呢?
??4、第九行if(age!=other.age)前面一個age不用加this或者dog嗎?
??感謝解答!
2016-01-17
剛看完教程 ?以下內容僅代表個人觀點,不保證正確
問題1 ?equals()方法是所有類的共父類Object中的方法,要重載改方法需保持參數一致,Object中equals原型的參數就是Obeject,不能特化Dog,因為這里的方法是繼承來的。
問題2 ?感覺和問題4是一個問題,this指針用于指向該類,之前的課程中有講過,當發生屬性名和構造函數的參數名重名時,使用“this.屬性名=參數名”的方法進行初始化,這里this可以區別局部作用域的參數名。也就是說沒有重名現象,寫this是多余的
問題3 ?這個貌似和多態有關,c++里如果接觸過的話會更好理解,基類指針可以指向派生類對象,舉個例子:假如父親有兩個兒子,這里父親是基類,兒子是派生類,“父親”這一名詞(不是對象名,是類名)可以代表某個兒子。
if(getClass()!=obj.getClass())只能證明obj類名和Dog類名相同,有可能涉及到多態(obj和Dog不是同一類,一個父親一個兒子;或者兩個都是兒子,老大,老二),所以要進行強制類型轉化。
2016-02-21
這段代碼改為下邊這樣也是沒問題的,這樣容易理解: