Если ваш метод не принимает аргумент типа Object, он не переопределяет версию по умолчанию equals
, а скорее перегружает его.Когда это происходит, обе версии существуют, и Java решает, какую из них использовать, основываясь на типе переменной (не фактическом типе объекта) аргумента.Таким образом, эта программа:
public class Thing {
private int x;
public Thing(int x) {
this.x = x;
}
public boolean equals(Thing that) {
return this.x == that.x;
}
public static void main(String[] args) {
Thing a = new Thing(1);
Thing b = new Thing(1);
Object c = new Thing(1);
System.out.println(a.equals(b));
System.out.println(a.equals(c));
}
}
сбивает с толку печатает true для первого сравнения (потому что b
имеет тип Thing) и false для второго (поскольку c
имеет тип Object, даже если это происходитсодержать вещь).