Перевищення проти перевантаження
Метод Overriding та метод Overloading - це два поняття / методи / особливості, що зустрічаються в деяких мовах програмування. Обидві концепції дозволяють програмісту надавати різні реалізації для методів з одним іменем. Перевизначення методів дозволяє програмісту запропонувати альтернативну реалізацію в рамках підкласу методу, який уже визначений у його суперкласі. Перевантаження методу дозволяє програмісту надавати різні реалізації для декількох методів з тим самим іменем (в межах одного класу).
Що переважає?
Як було сказано вище, клас може поширювати надкласний або батьківський клас на об'єктно-орієнтованих мовах програмування. Дочірній клас може мати свої власні методи або, за бажанням, мати власні реалізації для методів, які вже визначені в його батьківському класі (або одному з його батьківських класів). Отже, коли остання трапляється, це називається методом переосмислення. Іншими словами, якщо дочірній клас забезпечує реалізацію методу з тим же типом підпису та повернення, що і метод, який уже визначений в одному з його батьківських класів, вважається, що цей метод буде замінено (замінено) реалізацією дочірнього класу . Отже, якщо в класі є перекритий метод, система виконання повинна буде вирішити, який спосіб використання використовується. Ця проблема вирішується, переглядаючи точний тип об'єкта, який використовується для виклику до нього. Якщо об’єкт батьківського класу використовується для виклику методу, що перекривається, тоді використовується реалізація в батьківському класі. Аналогічно, якщо це об'єкт дочірнього класу, який використовується, то використовується реалізація дочірнього класу. Сучасні мови програмування, такі як Java, Eifell, C ++ та Python, дозволяють змінити метод.
Що таке перевантаження?
Перевантаження методу - це функція, яка надається деякими мовами програмування для створення декількох методів з тим же ім'ям, але з різними типами введення та виведення. У сучасних мовах програмування, таких як Java, C #, C ++ та VB.NET, ця функція доступна. Ви можете перевантажити метод, створивши інший метод з тим самим іменем, але з іншим підписом методу або іншим типом повернення (або обом). Наприклад, якщо у вас є method1 (type1 t1) та method1 (type2 t2) всередині одного класу, вони перевантажуються. Тоді системі доведеться вирішити, яку з них виконувати, коли вона викликається. Ця диференціація проводиться шляхом перегляду типу параметрів, які передаються методу. Якщо аргумент типу1, то викликається перша реалізація, тоді як якщо вона типу2, то друга реалізація викликається.
Яка різниця між перекриттям і перевантаженням?
Незважаючи на те, що перекриття методів та перевантаження методів використовуються для забезпечення методу з різними реалізаціями, існують ключові відмінності між цими двома концепціями / методами. Перш за все, суб'єкти методу, що переосмислюють, завжди знаходяться в різних класах, тоді як суб'єкти методу перевантаження залишаються в межах одного класу. Це означає, що переосмислення можливе лише в об'єктно-орієнтованих мовах програмування, які дозволяють успадкувати, тоді як перевантаження може бути доступною і в не об'єктно-орієнтованій мові. Іншими словами, ви перекриваєте метод у суперкласі, але перевантажуєте метод у своєму власному класі.
Інша відмінність полягає в тому, що перезаписані методи мають однакове ім'я методу, підпис методу та тип повернення, але перевантажені методи повинні відрізнятись як підписом, так і типом повернення (ім'я має бути однаковим). Для розмежування двох перекритих методів використовується точний тип об'єкта, який використовується для виклику використовуваних методів id, тоді як для розмежування двох перевантажених методів використовуються типи параметрів. Ще одна ключова відмінність полягає в тому, що перевантаження вирішується під час компіляції, а переосмислення - під час виконання.