我正在学习 Java,他们给了我一个练习,但我真的很挣扎。我会给你完整的练习(它是从我的母语翻译的)而不是解释它,这样你就可以理解它。 我真的不明白我该怎么做。我不会假装完整的代码(尽管我很感激,因为制作精良的代码可以帮助我改进并更好地理解应该如何完成事情),但至少我想知道我应该从哪里开始寻找对于解决方案,因为现在我正在碰壁,而且很痛。
我的第一个想法是重写 .equals 方法,但这似乎不对。我以为我可以创建一个子类,但在示例中,他们对主实例和 3 个派生实例使用相同的类,所以这是不行的。
练习:
创建一个 Animal 类,其特征如下:
- 腿数
- 类型(鸟、猫等)
- 平均体重
如果两只动物具有相同的腿数、属于相同的类型并且具有相同的平均体重,则它们被认为是平等的。 该类必须实现三种方法,允许转换 Animal 以便仅比较其中一个特征 (每个特征都有一种方法)。
<小时/>示例:
Animal cat = new Animal (4, "Cat", 5);
Animal dog = new Animal (4, "Dog", 5);
Animal catNumberOfLegs = cat.compareNumberOfLegs();
Animal catType = cat.compareType ();
Animal catWeigth = cat.compareWeigth();
Animal dogNumberOfLegs = dog.compareNumberOfLegs ();
Animal dogType = dog.compareType ();
Animal dogWeigth = dog.compareWeigth ();
System.out.println (cat.equals (dog)); // false
System.out.println (catNumberOfLegs.equals (dogNumberOfLegs)); // true
System.out.println (catType.equals (dogType)); // false
System.out.println (catWeigth.equals (dogWeigth)); // true
------------
变量的值必须保持不变。
Java 是一种面向对象的语言:记住它!
编辑: 我正在编辑这个,因为我看到评论中有些困惑,不知道是因为练习写得不好还是因为翻译的原因。
重点是,我有两个 Animal 类的实例。一个叫猫,另一个叫狗。我有这 3 个单独的方法来实现,当在实例上使用时,返回一个新实例,该实例在使用 .equals() 时仅考虑其中一个变量。我们以方法“compareNumberOfLegs ();”为例举个例子。 动物dogTWO=dog.compareNumberOfLegs(); 动物 catTWO = cat.compareNumberOfLegs(); 这意味着“dogTWO”将是一个新实例,它将保留“dog”的所有内容,但如果使用 .equals() 与“catTWO”进行比较,我将得到“True”,因为只会比较“numberOfLegs”。
最佳答案
在您的 Animal 类中,您必须实现 equals()
方法。
equals() 是默认实现的,因为它是对象上的一个方法,但您必须为了您的目标重写它的行为,
所以你的 Animal
类中有:
public boolean equals(Object value) {
if (value == null) return false;
if (!value instanceof Animal) return false;
Animal other = (Animal)value;
if (this.numberOfLegs != other.getNumberOfLegs()) return false;
if (this.type.equals(other.getType()) return false;
if (this.weigth != other.getWeigth()) return false;
return true;
}
所以你有了对象实例 cat
和 dog
,你可以调用 cat.equals(dog);
关于java - 仅比较两个实例之间的一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55146267/