為什么我這樣寫 自動(dòng)生成的是Animal other = (Animal) obj;轉(zhuǎn)換成Animal類 而不是轉(zhuǎn)換為Dog類
package test;
public class Animal {
int age;
String shout;
String name;
String eat;
public void a1(){
System.out.println("這只"+name+"年齡大概是"+age+"它的叫聲是"+shout+"它們主要吃"+eat);
}
public class Dog extends Animal{
String kind;
public void a1() {
System.out.println("這只"+name+"年齡大概是"+age+"它的叫聲是"+shout+"它們主要吃"+eat+"它們總是讓人感覺很"+kind);
}
}
public static void main(String[] args) {
Animal a = new Animal();
Dog p1 = a.new Dog();
Dog p2 = a.new Dog();
if(p1.equals(p2)) {
System.out.println("兩個(gè)對(duì)象相同;");
}
else {
System.out.println("兩個(gè)對(duì)象不同;");
}
p1.age= 5;
p1.name= "小狗";
p1.shout= "汪汪汪";
p1.eat = "肉、蔬菜";
p1.kind = "友好";
//p1.a1();
//System.out.println(p1);
}
@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;
if (eat == null) {
if (other.eat != null)
return false;
} else if (!eat.equals(other.eat))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (shout == null) {
if (other.shout != null)
return false;
} else if (!shout.equals(other.shout))
return false;
return true;
}
}
2019-08-14
Dog p1 = a.new Dog();
Dog p2 = a.new Dog();
這兩句為實(shí)例化內(nèi)部類語句了,Dog是子類并非內(nèi)部類,所以equals()的自動(dòng)生成是在Animal類下自動(dòng)生成的,所以默認(rèn)為對(duì)比Animal類型,若在Dog類下自動(dòng)生成重寫equals()則會(huì)自動(dòng)生成為Dog類型
2019-08-31
主要看你在那個(gè)類內(nèi)重寫equals() ? 在Dog類內(nèi)重寫就是?Dog other = (Dog?) obj ? 在Animal內(nèi)重寫就是?Animal other = (Animal) obj ? 看你重寫的對(duì)比屬性 是在Animal類重寫 ?如果是在Dog重寫的 對(duì)比的屬性只有kind,我測(cè)試后是這個(gè)結(jié)論
不過你這個(gè)代碼是怎么寫在一個(gè)文件里的 ?我自己寫會(huì)提示錯(cuò)誤 ?復(fù)制你的也會(huì)提示錯(cuò)誤