java - 仅比较两个实例之间的一个变量

标签 java oop

我正在学习 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;
}

所以你有了对象实例 catdog,你可以调用 cat.equals(dog);

关于java - 仅比较两个实例之间的一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55146267/

相关文章:

java - 初始化抽象类的一般变体

java - Apache POI setPrintArea 为 A4 页面大小

java - 字符串的简单日期格式

php - 从不在构造函数中实例化对象?

java - 无法转换为子类

c++ - 访问类中的几个容器

objective-c - 了解何时使用继承来允许一个类使用另一个类的实例

java - 静态方法使用泛型创建内部类

java - 如何在 Java 中的对象参数中初始化数组?

javascript - JS - 停止对象链方法没有错误