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

Прежде чем углубляться в различия между перегрузкой и переопределением, мы должны понять, что они на самом деле и сценарии, в которых они особенно используются? Новички в Java часто путаются между ними, но они полностью отличаются друг от друга и используются в своих конкретных сценариях. Перегрузка методов - это когда у нас несколько методов с одинаковым именем, но разными сигнатурами. Сигнатуры включают количество параметров метода, тип данных параметров. Возвращаемый тип метода не включен в подпись. Это сделано для обеспечения возможности повторного использования одного и того же имени метода и повышения читаемости программ. Переопределение метода происходит в случае наследования, в котором производный класс наследует свойства от базового класса. Он включает в себя определение одного и того же метода базового класса в производном классе с тем же параметром и типом возврата, чтобы определить любую конкретную функциональность / реализацию этого метода в производном классе.

Рассмотрим сценарий, в котором программист должен найти область геометрической фигуры. Площадь каждой фигуры отличается друг от друга. Например, для нахождения площади квадрата требуется только один параметр «сторона», для прямоугольника требуется два параметра «длина и ширина», тогда как для круга требуется радиус, который может быть десятичным. Для решения этой задачи выполняется перегрузка метода, при которой область метода имеет разные параметры и тип данных для области с разными фигурами. Подумайте о ситуации в банковской системе, хотя несколько методов и процедур для всех сотрудников одинаковы, за исключением некоторых, например, процентные ставки для обычных и пожилых людей разные. В этом случае переопределение метода используется с различными реализациями процентных ставок метода в классах «Обычный» и «Пенсионер», наследующих базовый класс «Банковские тарифы».

Сравнение лицом к лицу между перегрузкой и переопределением (инфографика)

Ниже приведено сравнение 7 лучших вариантов перегрузки с переопределением :

Ключевые различия между перегрузкой и переопределением

Давайте обсудим некоторые из основных ключевых различий между перегрузкой и переопределением:

  1. При перегрузке методов методы могут иметь одинаковые или разные спецификаторы / модификаторы доступа в имени метода, тогда как в методе переопределения метода базового случая (переопределенный метод) должен быть спецификатор ограниченного доступа, чем метод родительского класса. Например, если метод базового класса защищен, то закрытый дочерний метод не допускается.
  2. При сравнении с точки зрения производительности перегрузка имеет лучшую производительность по сравнению с переопределением, поскольку перегрузка метода выполняется во время компиляции.
  3. Тип возврата метода никогда не является частью перегрузки метода, поэтому не имеет значения, имеют ли разные перегруженные методы одинаковый или другой тип возвращаемого значения, тогда как в методе переопределения метода обоих методов родительского и базового классов должны быть одинаковыми,
  4. Если говорить о привязке, то у Overloading есть статическая привязка, а у Overriding динамическая привязка.
  5. Исключение, создаваемое методом, не имеет значения в перегруженном методе, если один метод вызывает исключение, другие перегруженные методы могут / не могут вызвать то же или другое исключение, но в случае переопределения метод переопределения (метод в производном классе) не может вызвать исключение более высокой иерархии, чем переопределенный метод (метод в базовом классе).
  6. Все спецификаторы, такие как private, final и static, не могут использоваться в переопределении метода, тогда как все спецификаторы доступа разрешены в перегрузке метода.

Сравнительная таблица перегрузки и переопределения

В таблице ниже приведены сравнения между перегрузкой и переопределением:

S.No. перегрузка Переопределение
1Перегрузка методов выполняется для расширенного определения методов в соответствии с различными ситуациями.Переопределение метода выполняется для обеспечения конкретной реализации методов, определенных в родительском классе.
2Перегрузка метода выполняется в одном классе, в котором один класс имеет разные определения метода.Переопределение метода выполняется между двумя классами, имеющими отношение IS-A (Наследование) между ними.
3Перегрузка метода выполняется во время компиляции и, следовательно, она известна как полиморфизм времени компиляции.Переопределение метода выполняется во время выполнения и, следовательно, оно известно как полиморфизм во время выполнения.
4Порядок параметров, тип данных и количество параметров должны быть разными для перегрузки метода.Порядок параметров, тип данных и количество должны быть одинаковыми для переопределения метода.
5Тип возврата метода может быть одинаковым или различным в случае перегрузки метода. Это не имеет значения вообще.Тип возврата метода должен быть одинаковым как в родительском, так и в дочернем классе в случае переопределения метода.
6Статические методы могут быть перегружены, т.е. у нас могут быть разные статические методы, перегруженные в одном и том же классе.Статические методы никогда не могут быть переопределены, т. Е. Статический метод в родительском классе и базовом классе не имеет никакого отношения между ними.
7Закрытые и конечные методы могут быть перегружены в классе, т. Е. В классе может быть перегружено более 1 закрытых и конечных методов.Закрытые и конечные методы никогда не могут быть переопределены в дочернем классе.

Пример перегрузки метода:

class FIgures(
public int area(int side)
(
return side*side;
)
public int area(int length, int breadth) //method overloading
(
return length*breadth;
)
public static void main(String() args)
(
Figures f = new Figures ();
System.out.println(“Area of Square “+ f.area(10));
System.out.println(“Area of Rectangle “+ f.area(12, 10));
)
)

Выход:

Площадь пл. 100
Площадь прямоугольника 120

В приведенном выше примере метод area () перегружен и имеет разные параметры в обоих перегруженных методах. Так как площадь нужно выяснить как для квадрата, так и для прямоугольника, но с разными параметрами.

Пример переопределения метода:

class BankRates( // parent(base) class
void rates()
(
System.out.println(“Rates for normal citizen is 3.5%”);
)
)
class SeniorCItizen extends BankRates( //child class inheriting parent class
void rates() // method overriding
(
System.out.println(“Rates for senior citizens is 4.5%”);
)
)
class Bank(
public static void main(String() args)
(
SeniorCItizen sc = new BankRates(); sc.rates();
)
)

Выход:

Тарифы для пенсионеров - 4, 5%.

В вышеприведенном примере метод 'values ​​()' переопределен в производном классе SeniorCitizen, потому что мы хотим, чтобы ставки метода также были в классе SeniorCitizen, но с другой реализацией.

Вывод

Приведенное выше объяснение ясно показывает разницу между перегрузкой и переопределением и конкретными сценариями, в которых используются эти два. Перед программированием необходимо понять эти основные концепции Java, поскольку они составляют основу многих вещей и помогают легко понять более продвинутые концепции.

Рекомендуемые статьи

Это было руководство к разнице между перегрузкой и переопределением. Здесь мы также обсудим перегрузку и переопределение ключевых различий с помощью инфографики и таблицу сравнения. Вы также можете взглянуть на следующие статьи, чтобы узнать больше -

  1. Функциональное программирование против ООП
  2. Что такое переопределение в JavaScript?
  3. Как перегрузка работает в PHP?
  4. Обзор перегрузки в C #
  5. Переопределение в Java
  6. Перегрузка Python
  7. Перегрузка и переопределение в C #