Разлика между претоварване срещу преодоляване

Преди да се потопим дълбоко в разликите между Overloading vs Overriding, трябва да разберем какви всъщност са те и сценариите, в които те се използват особено? Новаците в Java често се бъркат между двете, но те са напълно различни един от друг и се използват в техните специфични сценарии. Претоварването с методи е когато имаме множество методи с едно и също име, но различни подписи. Подписите включват броя на параметрите на метода, типа данни на параметрите. Методът за връщане не е включен в подписа. Това се прави, за да се осигури функционалността на повторно използване на едно и също име на метод и повишаване на четността на програмите. Метод Overriding се случва в случай на Наследяване, при което производен клас наследява свойствата от базовия клас. Тя включва дефиниране на един и същ метод на базовия клас в производен клас със същия параметър и тип връщане, за да се дефинира всяка специфична функционалност / реализация на този метод в производния клас.

Помислете за сценарий, при който програмист трябва да намери областта на геометрична фигура. Площта на всяка фигура варира една от друга. Например, за намиране на площта на квадрат е необходим само един параметър „страна“, за правоъгълник са необходими два параметъра „дължина и широчина“, докато за радиус на кръг се изисква радиус, който може да бъде десетичен. За решаването на тази цел се извършва претоварване, при което областта на метода има различни параметри и тип данни за област с различни фигури. Помислете за ситуацията на банковата система, въпреки че множеството методи и процедури за всички служители са еднакви, с изключение на някои като лихвените проценти за нормалните и възрастните граждани е различно. В този случай се използва методът Overriding, който има различни реализации на метода Лихвени проценти както в нормалния, така и в старшия граждански клас, наследяващ базовия клас „Банкови лихвени проценти“.

Сравнение между главата на претоварването срещу преодоляването (Инфографика)

По-долу е най-добрите 7 сравнение между претоварване срещу преодоляване :

Ключови разлики между претоварване срещу преодоляване

Нека обсъдим някои от основните ключови разлики между Overloading vs Overriding:

  1. При претоварване на методите методите могат да имат същите или различни спецификатори / модификатори за достъп в името на метода, докато в метода за преодоляване на метода на основния случай (метод на преодоляване) трябва да има ограничен достъп за достъп от метода на родителски клас. Например, ако методът на базов клас е защитен, тогава не е позволен дъщерният метод частен.
  2. Когато се сравнява по отношение на производителността, претоварването има по-добра производителност в сравнение с Overriding, тъй като претоварването на метода се извършва по време на компилация.
  3. Типът на връщане на метод никога не е част от метода Overloading, следователно няма значение дали различните претоварени методи имат един и същ или различен тип връщане, докато в Method Overriding return type и методите на родител и базов клас трябва да са абсолютно еднакви,
  4. Когато говорим за свързване, Overloading има статично свързване, докато Overriding има динамично свързване.
  5. Изключението, хвърлено по метод, няма значение за претоварения метод, ако един метод хвърля изключение, други претоварени методи могат / не могат да хвърлят същото или различно изключение, но в случай на Overriding, методът Overriding (методът в производен клас) не може да хвърли изключение от по-висока йерархия от методът, който е отменен (метод в базовия клас).
  6. Всички спецификатори като частни, крайни и статични не могат да се използват в метод Overriding, докато всички спецификатори за достъп са разрешени при претоварване на метода.

Таблица за сравнение на претоварване срещу преодоляване

Таблицата по-долу обобщава сравненията между Overloading vs Overriding:

S.No. Претоварването Замяната
1Претоварването на метода се прави, за да има разширено определение на методите в зависимост от различни ситуации.Преопределянето на метода се извършва с цел да се осигури конкретна реализация на методи, дефинирани в родителския клас.
2Метод Претоварването се извършва в един клас, в който един клас с различни дефиниции на метод.Метод Overriding се извършва между два класа, имащи IS-A (Наследяване) връзка между тях.
3Метод Претоварването се извършва по време на компилиране и затова е известно като Полиморфизъм за компилиране.Метод Overriding се извършва по време на изпълнение и затова е известен като Runtime Polymorphism.
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%

В горния пример методът "rate ()" е отменен в производен клас "SeniorCitizen", тъй като ние също искаме методите в клас SeniorCitizen, но с различна реализация.

заключение

Горното обяснение ясно показва разликата между Overloading vs Overriding и специфичните сценарии, където се използват тези два. Преди да програмирате, човек трябва да разбере тези основни понятия на Java, тъй като те са в основата на много неща и помагат за лесното разбиране на по-напредналите концепции.

Препоръчителни статии

Това е ръководство за най-високата разлика между Overloading vs Overriding. Тук също обсъждаме ключовите разлики на Overloading vs Overriding с инфографика и сравнителната таблица. Може да разгледате и следните статии, за да научите повече -

  1. Функционално програмиране срещу OOP
  2. Какво е преобладаващо в JavaScript?
  3. Как работи Претоварването в PHP?
  4. Преглед на претоварването в C #
  5. По-важно в Java
  6. Python Overloading
  7. Претоварване и отмяна в C #