Страницы

Поиск по вопросам

среда, 3 октября 2018 г.

Как правильно: перегрузка или переопределение?

В одних статьях пишут перегрузка, в других пишут переопределение. Тоже самое с наследниками и производными. По смыслу это одно и то же, но как правильно:
перегрузка или переопределение? в наследниках или в производных?
Чтобы далеко не ходить за примерами я стал искать прямо на сайте ответы по интересующим меня методам Equals и OnModelCreating, которые описаны в документации как виртуальные, и нашел следующие ответы:
"следует перегрузить метод OnModelCreating - и написать там примерно следующее" 27 май '15 в 15:53, Pavel Mayorov, 9,255 "базовый класс всех типов-значений, перегружает метод Equals" 30 сен '15 в 0:01, VladD, 74k "Переопределите Equals так, чтобы он сравнивал два экземпляра" 23 дек '15 в 8:52, PashaPash, 20.1k
Из контекста следует, что в ответах говорят о виртуальных методах. Получается, что перегрузка и переопределение - это одно и тоже. Хотелось бы понять как правильно: перегрузка или переопределение?
UPD: (2/10/2016 8:52 PM)
Перегрузка и переопределение, как сказал rdom: это абсолютно разные вещи VladD внес исправления в свой ответ. Ошибки в других ответах, надеюсь, также будут исправлены.


Ответ

перегрузка или переопределение?
По смыслу - это абсолютно разные вещи.
Перегрузка (Overloading) - это возможность использовать одинаковые имена в пределах одного класса у методов сходных по своей сути, но не реализации,за счет расширения понятия имени метода до сигнатуры. Подробнее в соседнем вопросе
Переопределение (Overriding) - относится к виртуальным и абстрактным методам. Это возможность замены виртуального или реализация абстрактного наследуемого метода базового класса методом производного класса.
Пример:
class A { virtual void SomeMethod(int par1, double par2) { }
//Делаем перегруженный вариант метода для другого набора параметров void SomeMethod(double par1, int par2) {} }
class B : A { //Переопределяем унаследованный виртуальный метод override void SomeMethod(int par1, double par2) { } }
UPD
в наследниках или в производных?
тут разночтений нет. Производный класс, класс наследник, а также принятые в Java суб-класс или подкласс, являются синонимами. Также синонимами являются базовый класс, класс предок, супер-класс(java) и над-класс(java).
Дабы не плодить споры: я использую перевод принятый в MSDN. В различных источниках могут использоваться другие варианты перевода. В любом случае, первичным остается смысл оригинальных терминов на английском.

Комментариев нет:

Отправить комментарий