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;
}
}
Dog p1 = a.new Dog();
Dog p2 = a.new Dog();
这两句为实例化内部类语句了,Dog是子类并非内部类,所以equals()的自动生成是在Animal类下自动生成的,所以默认为对比Animal类型,若在Dog类下自动生成重写equals()则会自动生成为Dog类型
主要看你在那个类内重写equals() 在Dog类内重写就是 Dog other = (Dog ) obj 在Animal内重写就是 Animal other = (Animal) obj 看你重写的对比属性 是在Animal类重写 如果是在Dog重写的 对比的属性只有kind,我测试后是这个结论
不过你这个代码是怎么写在一个文件里的 我自己写会提示错误 复制你的也会提示错误