Рекомендуем, 2022

Выбор редакции

Разница между перегрузкой метода и переопределением

Перегрузка метода
Перегрузка методов, также известная как перегрузка функций или полиморфизм времени компиляции, представляет собой концепцию наличия двух или более методов с одинаковым именем, но разной сигнатурой в одной и той же области видимости. Есть много языков программирования, которые поддерживают эту функцию: Ada, C ++, C #, D и Java.

Пример перегрузки метода в C #

class OverloadShapes {float Polygon (int radius, float pi) {float circleArea = pi * radius * radius; } int Polygon (int length, int widthth) {int rectangleArea = длина * ширина; } int Polygon (int side) {int squareArea = side * side; }}
1 2 3 4 5 6 7 8 9 10 11 12 13 14class OverloadShapes {float Polygon (int radius, float pi) {float circleArea = pi * radius * radius; } int Polygon (int length, int widthth) {int rectangleArea = длина * ширина; } int Polygon (int side) {int squareArea = side * side; }}

Как показано в приведенном выше примере, метод «Полигон» перегружен 3 раза с использованием другой сигнатуры метода, то есть тип или количество параметров различаются.

Переопределение метода
Переопределение метода, также известное как переопределение функции или полиморфизм времени выполнения, является функцией ООП, которая позволяет дочернему классу предоставлять собственную реализацию методу, определенному в родительском классе. Реализация в дочернем классе переопределяет определение метода в базовом классе, при условии, что метод в дочернем классе должен иметь то же имя, сигнатуру и тип возвращаемого значения.

Пример переопределения метода в C #

class Source1 {public void draw () {Console.Writeline ("Я в классе Source1"); }} класс Source2 extends Source1 {public void draw () {Console.Writeline ("Я нахожусь в классе Source2"); }}
1 2 3 4 5 6 7 8 9 10class Source1 {public void draw () {Консоль. Writeline («Я в классе Source1»); }} класс Source2 extends Source1 {public void draw () {Консоль. Writeline («Я в классе Source2»); }}

Здесь метод draw в классе Source2 переопределяет метод draw, определенный в классе Source1.

Разница между перегрузкой метода и переопределением метода

  1. В методе методы перегрузки должны иметь другую сигнатуру. В методе переопределяющие методы должны иметь одинаковую подпись.
  2. Перегрузка функций заключается в том, чтобы «добавить» или «расширить» больше поведения метода. Переопределение функции заключается в том, чтобы полностью «изменить» или «переопределить» поведение метода.
  3. Перегрузка метода используется для достижения полиморфизма во время компиляции; Переопределение метода используется для достижения полиморфизма во время выполнения.
  4. При перегрузке метода / функции компилятор знает, какой объект назначен какому классу во время компиляции, но при переопределении метода эта информация не известна до времени выполнения.
  5. Перегрузка функций происходит в том же классе, тогда как переопределение происходит в классе, производном от базового класса.
Top