老師說這個是判斷兩個對象類型是否相等,可是兩個類型不是不一樣么?老師說一樣,一樣的話后面怎么還要轉換類型
? ? if?(getClass()?!=?obj.getClass())
????????????return?false;
//將傳入的對象強制轉換為當前對象
????????Dog?other?=?(Dog)?obj;
? ? if?(getClass()?!=?obj.getClass())
????????????return?false;
//將傳入的對象強制轉換為當前對象
????????Dog?other?=?(Dog)?obj;
2015-07-30
舉報
2015-08-01
這條語句就是判斷這2個對象的類的類型是否一樣的。getClass()是this對象的類的類型,就是調用這個方法的對象。
obj.getClass()是參數傳遞過來的對象的類的類型,就是你要比較目標的類的類型。
舉個例子吧:
還是Dog這個類,你重寫了equals方法。重寫的目的是當使用blackDog對象的時候,你發(fā)現還有一個叫whiteDog的對象,你想比較他倆是否相等。如果不重寫equals方法,只能他倆的地址值相同,但實際上你想比較的是名字、性別、品種什么的是否相同。那當你使用這句boolean flag=blackDog.equals(whiteDog);的時候,"if (getClass() != obj.getClass())" 這里第一個getClass()就是blackDog調用的,obj.getClass就是 whiteDog調用的。
(Dog blackDog=new Dog();whiteDog不是你創(chuàng)建的,所以你不清楚他是什么類)
class Dog{
?? public boolean equals(object obj){
? }
}
2015-07-30
比如說Dog類里面有name這個屬性吧。
傳遞進來的是Object類的對象吧,Object對象可是沒有name這個屬性的,那該怎么比較呢?所以首先要判斷類是否一樣,如果都是Dog了,那就都有name屬性了,但傳遞進來的是Object對象,想調用的話不強轉是不能調用的。