怎么比較兩個(gè)不同子類的值是否相等?
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同一個(gè)子類時(shí),equals可以比較屬性值,而new不同子類時(shí),不能比較屬性值,怎么修改才能比較不同子類的屬性值
謝謝
2016-04-08
?Cat cat = new Cat();
換成這個(gè)以后 就是相同的了
Dog cat = new Dog();
至于為啥比較出來(lái)不相同 是因?yàn)?它們的類型就是不一樣的 所以還沒(méi)有比到值 直接在類型這里就返回 flase了
所以不同,修改成相同的類型以后就能比較了
還有想比較兩個(gè)類的數(shù)據(jù)是否相同 可以直接使用 == 來(lái)進(jìn)行對(duì)比
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不同");
????????}
這樣就可以對(duì)比了=-= 簡(jiǎn)單粗暴~望采納
2016-08-28
都是初學(xué)者,好吧,哭
2016-08-28
天吶,能不能用簡(jiǎn)單一點(diǎn)的代碼來(lái)寫啊。這本身不是很復(fù)雜的問(wèn)題,但是你的代碼看得我眼花了。
2016-04-09
是的 目前我們所學(xué)的知識(shí)就是后面可以這么去理解 等到后面慢慢累積了更多知識(shí)了 就會(huì)理解的更加透徹,現(xiàn)在先理解大概是個(gè)啥意思有一個(gè)認(rèn)識(shí) 就好了 不能說(shuō)完全懂了 也不能完全都不懂 ,我現(xiàn)在和你所說(shuō)的這些也算是我個(gè)人學(xué)到現(xiàn)在的一些理解,有的地方也不是百分之百正確,基本上大概這么個(gè)意思 所以有的東西還是需要自己多多去琢磨 自己琢磨透徹了 在聽(tīng)別人稍微講解一下 是很容易理解 和加深記憶的~
2016-04-08
new 同一個(gè)類 用==比較的是 它們的類型 或者說(shuō)是內(nèi)存地址 這個(gè)東西它們是使用的一樣的
不同類的時(shí)候 == 就無(wú)法比較類了,因?yàn)?類型不同 所在的 空間地址也不一樣 內(nèi)存地址也是不同的
但是?equals() 在String 字符串中 比較的時(shí)候 他比較的是兩個(gè) 變量的 內(nèi)容是不是一樣的 并不是去比較類型
和內(nèi)存地址 所以不同的類 就是 需要使用equals()來(lái)比較?
equals() 重寫 只是拿來(lái)比較對(duì)象的 ?來(lái)對(duì)比這個(gè)兩個(gè) 對(duì)象中間的類型 是否一致 它的屬性是否一致
2016-04-08
2016-04-08
no正常判斷,name就無(wú)法正常判斷了,即使是有值的
2016-04-08
要想nuw出來(lái)的東西直接帶有值
在子類里面 構(gòu)造一個(gè)方法 在這個(gè)里面賦值
public class Cat extends Animal{
public ?Cat(){
name ="狗";
age = 2;
}
}
這樣nuw出來(lái)的時(shí)候就直接有值了!
2016-04-08
animal[0].name = "狗";
2016-04-08
System.out.println(animal[0].name);
? ? ? ?System.out.println(animal[1].name);
在nuw了以后 打印這句話 你會(huì)發(fā)現(xiàn)你對(duì)象里面的 name是空的 木有值 所以找不到?
你給它賦予一個(gè)值以后 就可以去對(duì)比了 還有 字符串 是用?equals 去比較呢?
基本數(shù)據(jù)類型 比如 整形 布爾 ?浮點(diǎn)型 就用 ?== 去比較