Ключова різниця : перевантаження означає два методи одного і того ж класу з однаковими іменами та різними типами параметрів, тоді як перевизначення означає два різні методи в одному класі з однаковими типами параметрів, але з різними реалізаціями.
Методи перевизначення та перевантаження - це два поняття або методи, які використовуються в мовах програмування Java. Обидві концепції дозволяють програмісту надавати різні реалізації для методів під одним іменем. У цій статті розрізняють дві концепції програмування.
Перевантаження функцій або перевантаження методів дозволяють створювати кілька методів під одним і тим же ім'ям, в одному класі, але відрізняються один від одного у вхідному і вихідному типі функції. Вона просто визначається як здатність однієї функції виконувати різні завдання.
У перевантаженні реалізація методу має однакову назву, оскільки виконує подібні завдання. Крім того, перевантаження вважається поліморфним за своєю природою. Функції, що мають різні реалізації, залежать від вказаних типів аргументів. Зазвичай це пов'язано зі статичними мовами програмування, що забезпечує перевірку типу у викликах функцій. Він також вважається практичним, оскільки дозволяє програмісту писати декілька різних методів в одному класі. Однак при перевантаженні процесорного процесу процесор змінює назву всіх перевантажених методів, що може бути проблемою.
Метод перевизначення, в об'єктно-орієнтованому програмуванні, є функцією, що дозволяє підкласу або дочірньому класу забезпечувати конкретну реалізацію методу, який вже забезпечується одним з його супер-класів або батьківських класів. Реалізація в підкласі перекриває або замінює реалізацію в батьківському класі шляхом надання способу під тим же ім'ям, тими ж параметрами або підписом, і тим же типом повернення, що і метод в батьківському класі.
У перевизначенні методів функції кодуються для виконання конкретних завдань у програмі. Перевизначення залежить від присутності функції базового класу для його появи. Тут виконувана функція визначається об'єктом, який використовується для виклику, тобто якщо об'єкт батьківського класу використовується для виклику методу, то функція в батьківському класі буде виконана. Перевизначення носить поліморфний характер; він допомагає розробляти програми на основі першого неявного параметра, який може бути вирішений під час виконання. У java деякі мови дозволяють програмісту запобігти перевизначенню методу.
Порівняння між перевантаженням і перевизначенням:
Перевантаження | Перевизначення | |
Визначення | Це означає наявність методів одного класу під одним і тим же ім'ям, але кожен метод має різні параметри або має ті ж параметри з різними типами і порядком. | Це означає наявність підкласу з тими ж методами під однаковою назвою і точно таким же типом параметрів і тим же типом повернення, що і суперклас. |
Значення | Це означає, що більше одного методу мають однакову назву в одному класі, але мають іншу підпис. | Це означає, що метод базового класу повторно визначається у похідному класі з однаковим підписом. |
Поведінка | Він додає або поширюється на поведінку методів. | Вона змінює існуючу поведінку методу. |
Поліморфізм | Це поліморфізм часу компіляції. | Це поліморфізм часу виконання. |
Статичний метод | Статичний метод може бути перевантажений. | Неможливо перевизначити статичний метод. |
Бонд | Статична зв'язок. | Динамічна зв'язок. |
Успадкування | Він може або не може вимагати спадкування. | Вона завжди вимагає успадкування. |
Асоціація | Він зазвичай асоціюється зі статичними мовами програми. | Зазвичай це пов'язано з об'єктно-орієнтованими програмами. |
Підпис | Методи мають різну підпис. | Методи повинні мати однакову підпис. |
Швидкість | Це швидше, ніж перевизначення. | Це повільно в порівнянні з перевантаженням. |
Класи | Для перевантаження не потрібно більше одного класу. | Для перевантаження потрібні щонайменше два класи. |
Рівень | Методи можуть мати будь-який рівень доступу. | Методи мають однаковий або широкий рівень доступу. |
Приклад | Клас Add { int sum (int a, int b) { return a + b; } int sum (int a) { повернути a + 10; } } | Клас А // Супер клас { недійсний дисплей (int num) { print num; } } // Клас B успадковує клас A Клас B // Підклас { недійсний дисплей (int num) { print num; } } |