метод экземпляра equals () - PullRequest
       23

метод экземпляра equals ()

1 голос
/ 01 сентября 2011

Мне нужно создать подкласс HoverFrog с именем EOHoverFrog.Экземпляры EOHoverFrog отличаются от экземпляров HoverFrog тем, что два экземпляра EOHoverFrog считаются равными, если их положение и высота одинаковы независимо от их цвета.

Для этого мне нужно написать метод экземпляра, равный) для EOHoverFrog, которая переопределяет метод equals (), унаследованный от Object.Метод должен принимать аргумент любого класса.Если класс аргумента не совпадает с классом получателя, метод должен просто вернуть false, в противном случае он должен проверить равенство получателя и аргумента.

public boolean equals(Object obj)
{
   Frog.getClass().getHeight();
   HeightOfFrog height = (HeightOfFrog) obj;
   return (this.getPosition() == frog.getPosition());
  }

Пожалуйста, не могли бы вы сказатьмне ли я прав?

Ответы [ 3 ]

4 голосов
/ 01 сентября 2011
public boolean equals(Object obj) {
    // my first (incorrect) attempt, read Carlos Heuberger's comment below
    // if (!(obj instanceof EOHoverFrog))
    //    return false;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    // now we know obj is EOHoverFrog and non-null
    // here check the equality for the position and height and return
    // false if you have any differences, otherwise return true
}
1 голос
/ 01 сентября 2011

, что кажется неправильным.

public boolean equals(Object obj)
{
   Frog.getClass().getHeight(); // you arent assigning this to anything, and class probably
                                // doesn't have a getHeightMethod()

   HeightOfFrog height = (HeightOfFrog) obj; // obj should be an EOHoverFrog; you should
                                             // return false above this if obj is null or the 
                                             // wrong class

   return (this.getPosition() == frog.getPosition()); // what is frog?  It is not defined
                                                      // in your example

   // you are not comparing heights anywhere.
}

Хороший способ реализовать метод equals:

1) Убедитесь, что другой объект передан, obj в вашемрегистр, не нуль и правильный класс (или классы).В вашем случае, могут ли EOHoverFrog и HoverFrog экземпляры быть равными?

2) проводить сравнения, например,

// при условии, что высота и положение находятся на базовом уровне

var isHeightEqual = this.getHeight() == ((HoverFrog)obj).getHeight();
var isPositionEqual = this.getPosition() == ((HoverFrog)obj).getPosition(); 

3) теперь вы в состоянии проверить равенство

return isHeightEqual && isPositionEqual;
0 голосов
/ 01 сентября 2011

Прежде всего, прочитайте this , чтобы понять, как должен вести себя каждый метод equals ().

Во-вторых, если вы переопределяете метод equals (), то полезно добавить @ Override аннотация перед методом.

Для изучения на примерах вы можете изучить множество реализаций equals () здесь .

...