问答详情
源自:9-9 Java 中的 Object 类 Ⅱ

为什么我这样写 自动生成的是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;

}

}


提问者:LMH300913 2019-08-14 16:37

个回答

  • 慕虎3472736
    2019-08-14 23:23:33
    已采纳

    Dog p1 = a.new Dog();

    Dog p2 = a.new Dog();

    这两句为实例化内部类语句了,Dog是子类并非内部类,所以equals()的自动生成是在Animal类下自动生成的,所以默认为对比Animal类型,若在Dog类下自动生成重写equals()则会自动生成为Dog类型

  • 慕运维1495087
    2019-08-31 15:38:52

    主要看你在那个类内重写equals()   在Dog类内重写就是 Dog other = (Dog ) obj   在Animal内重写就是 Animal other = (Animal) obj   看你重写的对比属性 是在Animal类重写  如果是在Dog重写的 对比的属性只有kind,我测试后是这个结论

    不过你这个代码是怎么写在一个文件里的  我自己写会提示错误  复制你的也会提示错误