為什么我這樣寫 自動生成的是Animal other = (Animal) obj;轉換成Animal類 而不是轉換為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("兩個對象相同;");
}
else {
System.out.println("兩個對象不同;");
}
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();
這兩句為實例化內部類語句了,Dog是子類并非內部類,所以equals()的自動生成是在Animal類下自動生成的,所以默認為對比Animal類型,若在Dog類下自動生成重寫equals()則會自動生成為Dog類型
2019-08-31
主要看你在那個類內重寫equals() ? 在Dog類內重寫就是?Dog other = (Dog?) obj ? 在Animal內重寫就是?Animal other = (Animal) obj ? 看你重寫的對比屬性 是在Animal類重寫 ?如果是在Dog重寫的 對比的屬性只有kind,我測試后是這個結論
不過你這個代碼是怎么寫在一個文件里的 ?我自己寫會提示錯誤 ?復制你的也會提示錯誤