怎么比較兩個不同子類的值是否相等?
package?com.imooc; public?class?Animal?{ ????public?String?name; ????public?int?age; ????@Override ????public?boolean?equals(Object?obj)?{ ????????if?(this?==?obj) ????????????return?true; ????????if?(obj?==?null) ????????????return?false; ????????if?(getClass()?!=?obj.getClass()) ????????????return?false; ????????Animal?other?=?(Animal)?obj; ????????if?(age?!=?other.age) ????????????return?false; ????????return?true; ????} }
package?com.imooc; public?class?Dog?extends?Animal?{ }
package?com.imooc; public?class?Cat?extends?Animal?{ }
package?com.imooc; public?class?Initial?{ ????public?static?void?main(String[]?args)?{ ????????Dog?dog?=?new?Dog(); ????????Dog?dog2=new?Dog(); ????????Cat?cat?=?new?Cat(); ????????dog.age=1; ????????dog2.age=1; ????????cat.age=1; ????????if(dog.equals(dog2)){ ????????????System.out.println("dog和dog2的age相同"); ????????}else{ ????????????System.out.println("dog和dog2的age不同"); ????????} ????????if(dog.equals(cat)){ ????????????System.out.println("dog和cat的age相同"); ????????}else{ ????????????System.out.println("dog和cat的age不同"); ????????} ????} }
結果為dog和dog2的age相同,dog和cat的age不同
為什么new同一個子類時,equals可以比較屬性值,而new不同子類時,不能比較屬性值,怎么修改才能比較不同子類的屬性值
謝謝
2016-04-08
?Cat cat = new Cat();
換成這個以后 就是相同的了
Dog cat = new Dog();
至于為啥比較出來不相同 是因為 它們的類型就是不一樣的 所以還沒有比到值 直接在類型這里就返回 flase了
所以不同,修改成相同的類型以后就能比較了
還有想比較兩個類的數據是否相同 可以直接使用 == 來進行對比
if (dog.age ?==?dog2.age){
? ? ??System.out.println("dog和dog2的age相同");
????????}else{
????????????System.out.println("dog和dog2的age不同");
????????}
? ? ? ??
if (dog.age ?==?cat.age=1){
? ? ?System.out.println("dog和cat的age相同");
????????}else{
????????????System.out.println("dog和cat的age不同");
????????}
這樣就可以對比了=-= 簡單粗暴~望采納
2016-08-28
都是初學者,好吧,哭
2016-08-28
天吶,能不能用簡單一點的代碼來寫啊。這本身不是很復雜的問題,但是你的代碼看得我眼花了。
2016-04-09
是的 目前我們所學的知識就是后面可以這么去理解 等到后面慢慢累積了更多知識了 就會理解的更加透徹,現在先理解大概是個啥意思有一個認識 就好了 不能說完全懂了 也不能完全都不懂 ,我現在和你所說的這些也算是我個人學到現在的一些理解,有的地方也不是百分之百正確,基本上大概這么個意思 所以有的東西還是需要自己多多去琢磨 自己琢磨透徹了 在聽別人稍微講解一下 是很容易理解 和加深記憶的~
2016-04-08
new 同一個類 用==比較的是 它們的類型 或者說是內存地址 這個東西它們是使用的一樣的
不同類的時候 == 就無法比較類了,因為 類型不同 所在的 空間地址也不一樣 內存地址也是不同的
但是?equals() 在String 字符串中 比較的時候 他比較的是兩個 變量的 內容是不是一樣的 并不是去比較類型
和內存地址 所以不同的類 就是 需要使用equals()來比較?
equals() 重寫 只是拿來比較對象的 ?來對比這個兩個 對象中間的類型 是否一致 它的屬性是否一致
2016-04-08
2016-04-08
no正常判斷,name就無法正常判斷了,即使是有值的
2016-04-08
要想nuw出來的東西直接帶有值
在子類里面 構造一個方法 在這個里面賦值
public class Cat extends Animal{
public ?Cat(){
name ="狗";
age = 2;
}
}
這樣nuw出來的時候就直接有值了!
2016-04-08
animal[0].name = "狗";
2016-04-08
System.out.println(animal[0].name);
? ? ? ?System.out.println(animal[1].name);
在nuw了以后 打印這句話 你會發現你對象里面的 name是空的 木有值 所以找不到?
你給它賦予一個值以后 就可以去對比了 還有 字符串 是用?equals 去比較呢?
基本數據類型 比如 整形 布爾 ?浮點型 就用 ?== 去比較