Вы даже не перегружены, так как другой метод называется equals
. Но если вы добавите это s
, вы будете перегружать equals
. Хотя, если быть точным, мы говорим о перегрузке, если два (или более) метода с одинаковыми именами, но разными сигнатурами определены в одном классе . В вашем случае это сложнее, поскольку ваш equals
с другой подписью частично скрывает оригинал equals
. Что обычно плохо, потому что это почти всегда приводит к сложному пониманию поведения, таким образом, к тонким ошибкам. Всякий раз, когда кто-то вызывает equals
в экземпляре вашего класса, в зависимости от типа параметра вызов может переходить к другой реализации метода.
class Document {
public boolean equals(Document d)
{
//do something
}
}
Document doc1 = new Document();
Document doc2 = new Document();
String string = new String();
doc1.equals(doc2); // calls Document.equals
doc1.equals(string); // calls Object.equals!
Вы бы переопределили Object.equals
, если бы вы определили ваш метод с точно такой же сигнатурой, что и оригинал, т.е.
public boolean equals(Object obj) ...
В этом случае оба вышеуказанных вызова equals
правильно выполняются Document.equals
.