Перевантаження методу, також відоме як перевантаження функцій або поліморфізм часу компіляції, є концепцією наявності двох або більше методів з однаковою назвою, але різної підписи в тій же області. Є багато мов програмування, які підтримують цю функцію: Ada, C ++, C #, D і Java.
Приклад перевантаження методу в C #
клас OverloadShapes {float Полігон (int radius, float pi) {float circleArea = pi * радіус * радіус; } int Полігон (int довжина, int ширина) {int rectangleArea = довжина * ширина; } int Полігон (int сторона) {int squareArea = сторона * сторона; }}1 2 3 4 5 6 7 8 9 10 11 12 13 14 | клас OverloadShapes {float Полігон (int radius, float pi) {float circleArea = pi * радіус * радіус; } int Полігон (int довжина, int ширина) {int rectangleArea = довжина * ширина; } int Полігон (int сторона) {int squareArea = сторона * сторона; }} |
Як показано в наведеному вище прикладі, метод 'Polygon' перевантажується 3 рази різним методом підпису, тобто тип або кількість параметрів різні.
Метод перевизначення
Метод перевизначення, також відомий як перекриття функції або поліморфізм часу виконання, є функцією ООП, яка дозволяє дочірньому класу надавати власну реалізацію методу, визначеному в батьківському класі. Реалізація в дочірньому класі перевизначає визначення методу в базовому класі, за умови, що метод у дочірньому класі повинен мати однакову назву, підпис і тип повернення.
Приклад перевизначення методу в C #
class Source1 {public void draw () {Console.Writeline ("Я в класі Source1"); }} class Source2 розширює Source1 {public void draw () {Console.Writeline ("Я в класі Source2"); }}1 2 3 4 5 6 7 8 9 10 | class Source1 {public void draw () {Консоль. Writeline ("Я в класі Source1"); }} клас Source2 розширює Source1 {public void draw () {Консоль. Writeline ("Я в класі Source2"); }} |
Тут метод draw у класі Source2 замінює метод малювання, визначений у класі Source1.
Різниця між перевантаженням методу та перевизначенням методу
- У методі перевантаження методи повинні мати іншу підпис. У методі методи перевизначення повинні мати однакову підпис.
- Функція Перевантаження полягає в тому, щоб «додати» або «розширити» більше поведінку методу. Перевизначення функцій полягає в тому, щоб повністю "змінити" або "перевизначити" поведінку методу.
- Спосіб перевантаження використовується для досягнення поліморфізму часу компіляції; Метод перевизначення використовується для досягнення поліморфізму часу виконання.
- У методі / функції перевантаження компілятор знає, який об'єкт, призначений якому класу під час компіляції, але в методі перевизначення ця інформація не відома до часу виконання.
- Функція Перевантаження відбувається в тому ж класі, тоді як Перевизначення відбувається в класі, що походить від базового класу.