怎么比較兩個不同子類的值是否相等?
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不同");
????????}
????}
}結(jié)果為dog和dog2的age相同,dog和cat的age不同
為什么new同一個子類時,equals可以比較屬性值,而new不同子類時,不能比較屬性值,怎么修改才能比較不同子類的屬性值
謝謝
2016-04-08
?Cat cat = new Cat();
換成這個以后 就是相同的了
Dog cat = new Dog();
至于為啥比較出來不相同 是因為 它們的類型就是不一樣的 所以還沒有比到值 直接在類型這里就返回 flase了
所以不同,修改成相同的類型以后就能比較了
還有想比較兩個類的數(shù)據(jù)是否相同 可以直接使用 == 來進行對比
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
都是初學(xué)者,好吧,哭
2016-08-28
天吶,能不能用簡單一點的代碼來寫啊。這本身不是很復(fù)雜的問題,但是你的代碼看得我眼花了。
2016-04-09
是的 目前我們所學(xué)的知識就是后面可以這么去理解 等到后面慢慢累積了更多知識了 就會理解的更加透徹,現(xiàn)在先理解大概是個啥意思有一個認(rèn)識 就好了 不能說完全懂了 也不能完全都不懂 ,我現(xiàn)在和你所說的這些也算是我個人學(xué)到現(xiàn)在的一些理解,有的地方也不是百分之百正確,基本上大概這么個意思 所以有的東西還是需要自己多多去琢磨 自己琢磨透徹了 在聽別人稍微講解一下 是很容易理解 和加深記憶的~
2016-04-08
new 同一個類 用==比較的是 它們的類型 或者說是內(nèi)存地址 這個東西它們是使用的一樣的
不同類的時候 == 就無法比較類了,因為 類型不同 所在的 空間地址也不一樣 內(nèi)存地址也是不同的
但是?equals() 在String 字符串中 比較的時候 他比較的是兩個 變量的 內(nèi)容是不是一樣的 并不是去比較類型
和內(nèi)存地址 所以不同的類 就是 需要使用equals()來比較?
equals() 重寫 只是拿來比較對象的 ?來對比這個兩個 對象中間的類型 是否一致 它的屬性是否一致
2016-04-08
name?測試過調(diào)試輸出?name[i]?有數(shù)值嗎??=-=?正常賦值了以后是可以判斷和對比的 但是不要用等于號了?直接用???equals()?比較? 貓.equals("貓")??這樣就是判斷?貓這個字符串是否和?貓這個字符串?相等2016-04-08
package?com.imooc; public?class?Animal{ ????String?name; ????int?no; }package?com.imooc; public?class?Dog?extends?Animal?{ ????public?Dog(){ ????this.name="狗"; ????this.no=1; ????} }package?com.imooc; public?class?Cat?extends?Animal?{ ????public?Cat(){ ????this.name="貓"; ????this.no=2; ????} }package?com.imooc; import?java.util.Scanner; public?class?Initial?{ ????static?Animal[]?animal={new?Dog(),new?Cat()}; ????public?static?void?main(String[]?args)?{ ????????Scanner?input=new?Scanner(System.in); ????????System.out.println("請選擇方式:\n1.按品種選擇\n2.按序號選擇"); ????????int?choose=input.nextInt(); ????????if(choose==1){ ????????????searchByName(animal); ????????}else?if(choose==2){ ????????????searchByAge(animal); ????????} ????????input.close(); ????} ????static?void?searchByName(Animal[]?animal){ ????????Scanner?input=new?Scanner(System.in); ????????System.out.println("全部動物如下:\n序號\t品種"); ????????for(int?i=0;i<animal.length;i++){ ????????????System.out.println(animal[i].no+"\t"+animal[i].name); ????????} ????????System.out.print("請輸入動物名:"); ????????String?choose1=input.next(); ????????for(int?i=0;i<animal.length;i++){ ????????????System.out.println(animal[i].name+choose1); ????????????if(animal[i].name==choose1){ ????????????????System.out.println("選擇"+choose1+"成功"); ????????????????exitOrContinue(1); ????????????}else?if(i==animal.length-1&&choose1!=animal[i].name){ ????????????????System.out.println("選擇"+choose1+"失敗"); ????????????????exitOrContinue(1); ????????????} ????????} ????????input.close(); ????} ????static?void?searchByAge(Animal[]?animal){ ????????Scanner?input=new?Scanner(System.in); ????????System.out.println("全部動物如下:\n序號\t品種"); ????????for(int?i=0;i<animal.length;i++){ ????????????System.out.println(animal[i].no+"\t"+animal[i].name); ????????} ????????System.out.println("\n請輸入序號"); ????????int?choose2=input.nextInt(); ????????if(choose2>0&&choose2<=animal.length){ ????????????if(choose2==animal[(choose2-1)].no){ ????????????????System.out.println("選擇"+choose2+"成功"); ????????????????exitOrContinue(2); ????????????}else{ ????????????????System.out.println("選擇"+choose2+"失敗"); ????????????????exitOrContinue(2); ????????????} ????????} ????????input.close(); ????} ????static?void?exitOrContinue(int?eoc){ ????????Scanner?input=new?Scanner(System.in); ????????System.out.println("是否繼續(xù):\n1.繼續(xù)選擇\n2.退出"); ????????int?choose3=input.nextInt(); ????????if(choose3==1){ ????????????if(eoc==1){ ????????????????searchByName(animal); ????????????}else?if(eoc==2){ ????????????????searchByAge(animal); ????????????} ?????????}else?if(choose3==2){ ????????????System.out.println("歡迎下次再來!"); ????????} ????????input.close(); ????} }no正常判斷,name就無法正常判斷了,即使是有值的
2016-04-08
要想nuw出來的東西直接帶有值
在子類里面 構(gòu)造一個方法 在這個里面賦值
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了以后 打印這句話 你會發(fā)現(xiàn)你對象里面的 name是空的 木有值 所以找不到?
你給它賦予一個值以后 就可以去對比了 還有 字符串 是用?equals 去比較呢?
基本數(shù)據(jù)類型 比如 整形 布爾 ?浮點型 就用 ?== 去比較