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