Вы даже не перегружаетесь, так как другой метод называется 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
.
@Tyanna «Перегрузка: то же имя метода, тот же список параметров, разные классы Переопределение: одно и то же имя mehtod, список параметров, одинаковые или разные классы». - Это не так. –
Так жаль. Я вернул их назад. – Tyanna