为了账号安全,请及时绑定邮箱和手机立即绑定

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

}

}


正在回答

2 回答

Dog p1 = a.new Dog();

Dog p2 = a.new Dog();

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

0 回复 有任何疑惑可以回复我~
#1

LMH300913 提问者

所以这句话 public class Dog extends Animal 继承是内部类的继承 子类必须得重写一个class文件吗
2019-08-19 回复 有任何疑惑可以回复我~

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

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么我这样写 自动生成的是Animal other = (Animal) obj;转换成Animal类 而不是转换为Dog类

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信