Разница между перегрузкой и переопределением
Прежде чем углубляться в различия между перегрузкой и переопределением, мы должны понять, что они на самом деле и сценарии, в которых они особенно используются? Новички в Java часто путаются между ними, но они полностью отличаются друг от друга и используются в своих конкретных сценариях. Перегрузка методов - это когда у нас несколько методов с одинаковым именем, но разными сигнатурами. Сигнатуры включают количество параметров метода, тип данных параметров. Возвращаемый тип метода не включен в подпись. Это сделано для обеспечения возможности повторного использования одного и того же имени метода и повышения читаемости программ. Переопределение метода происходит в случае наследования, в котором производный класс наследует свойства от базового класса. Он включает в себя определение одного и того же метода базового класса в производном классе с тем же параметром и типом возврата, чтобы определить любую конкретную функциональность / реализацию этого метода в производном классе.
Рассмотрим сценарий, в котором программист должен найти область геометрической фигуры. Площадь каждой фигуры отличается друг от друга. Например, для нахождения площади квадрата требуется только один параметр «сторона», для прямоугольника требуется два параметра «длина и ширина», тогда как для круга требуется радиус, который может быть десятичным. Для решения этой задачи выполняется перегрузка метода, при которой область метода имеет разные параметры и тип данных для области с разными фигурами. Подумайте о ситуации в банковской системе, хотя несколько методов и процедур для всех сотрудников одинаковы, за исключением некоторых, например, процентные ставки для обычных и пожилых людей разные. В этом случае переопределение метода используется с различными реализациями процентных ставок метода в классах «Обычный» и «Пенсионер», наследующих базовый класс «Банковские тарифы».
Сравнение лицом к лицу между перегрузкой и переопределением (инфографика)
Ниже приведено сравнение 7 лучших вариантов перегрузки с переопределением :
Ключевые различия между перегрузкой и переопределением
Давайте обсудим некоторые из основных ключевых различий между перегрузкой и переопределением:
- При перегрузке методов методы могут иметь одинаковые или разные спецификаторы / модификаторы доступа в имени метода, тогда как в методе переопределения метода базового случая (переопределенный метод) должен быть спецификатор ограниченного доступа, чем метод родительского класса. Например, если метод базового класса защищен, то закрытый дочерний метод не допускается.
- При сравнении с точки зрения производительности перегрузка имеет лучшую производительность по сравнению с переопределением, поскольку перегрузка метода выполняется во время компиляции.
- Тип возврата метода никогда не является частью перегрузки метода, поэтому не имеет значения, имеют ли разные перегруженные методы одинаковый или другой тип возвращаемого значения, тогда как в методе переопределения метода обоих методов родительского и базового классов должны быть одинаковыми,
- Если говорить о привязке, то у Overloading есть статическая привязка, а у Overriding динамическая привязка.
- Исключение, создаваемое методом, не имеет значения в перегруженном методе, если один метод вызывает исключение, другие перегруженные методы могут / не могут вызвать то же или другое исключение, но в случае переопределения метод переопределения (метод в производном классе) не может вызвать исключение более высокой иерархии, чем переопределенный метод (метод в базовом классе).
- Все спецификаторы, такие как 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, поскольку они составляют основу многих вещей и помогают легко понять более продвинутые концепции.
Рекомендуемые статьи
Это было руководство к разнице между перегрузкой и переопределением. Здесь мы также обсудим перегрузку и переопределение ключевых различий с помощью инфографики и таблицу сравнения. Вы также можете взглянуть на следующие статьи, чтобы узнать больше -
- Функциональное программирование против ООП
- Что такое переопределение в JavaScript?
- Как перегрузка работает в PHP?
- Обзор перегрузки в C #
- Переопределение в Java
- Перегрузка Python
- Перегрузка и переопределение в C #