public class Animal {
private final String type;
Animal(String type) {
this.type = type;
}
public boolean equals(Animal animal) {
return type.equals(animal.type);
}
public int hashCode() {
return type.hashCode();
}
public static void main(String[] args) {
Set set = new HashSet();
set.add(new Animal("Dog"));
set.add(new Animal("Cat"));
set.add(new Animal("Cat"));
System.out.println(set.size());
}
}
Ответ
3
Метод equals должен принимать объекты типа Object, а у нас - Animal. Из-за этого не произошло перезаписи метода и использовался метод equals класса Object. Что бы такого не просходило, надо всегда использовать аннотацию @Override в тех местах, где мы хотим переопределить метод.
Метод equals должен принимать объекты типа Object, а у нас - Animal. Из-за этого не произошло перезаписи метода и использовался метод equals класса Object. Что бы такого не просходило, надо всегда использовать аннотацию @Override в тех местах, где мы хотим переопределить метод.
Комментариев нет:
Отправить комментарий