Разлика между претоварване срещу преодоляване
Преди да се потопим дълбоко в разликите между Overloading vs Overriding, трябва да разберем какви всъщност са те и сценариите, в които те се използват особено? Новаците в Java често се бъркат между двете, но те са напълно различни един от друг и се използват в техните специфични сценарии. Претоварването с методи е когато имаме множество методи с едно и също име, но различни подписи. Подписите включват броя на параметрите на метода, типа данни на параметрите. Методът за връщане не е включен в подписа. Това се прави, за да се осигури функционалността на повторно използване на едно и също име на метод и повишаване на четността на програмите. Метод Overriding се случва в случай на Наследяване, при което производен клас наследява свойствата от базовия клас. Тя включва дефиниране на един и същ метод на базовия клас в производен клас със същия параметър и тип връщане, за да се дефинира всяка специфична функционалност / реализация на този метод в производния клас.
Помислете за сценарий, при който програмист трябва да намери областта на геометрична фигура. Площта на всяка фигура варира една от друга. Например, за намиране на площта на квадрат е необходим само един параметър „страна“, за правоъгълник са необходими два параметъра „дължина и широчина“, докато за радиус на кръг се изисква радиус, който може да бъде десетичен. За решаването на тази цел се извършва претоварване, при което областта на метода има различни параметри и тип данни за област с различни фигури. Помислете за ситуацията на банковата система, въпреки че множеството методи и процедури за всички служители са еднакви, с изключение на някои като лихвените проценти за нормалните и възрастните граждани е различно. В този случай се използва методът Overriding, който има различни реализации на метода Лихвени проценти както в нормалния, така и в старшия граждански клас, наследяващ базовия клас „Банкови лихвени проценти“.
Сравнение между главата на претоварването срещу преодоляването (Инфографика)
По-долу е най-добрите 7 сравнение между претоварване срещу преодоляване :
Ключови разлики между претоварване срещу преодоляване
Нека обсъдим някои от основните ключови разлики между Overloading vs Overriding:
- При претоварване на методите методите могат да имат същите или различни спецификатори / модификатори за достъп в името на метода, докато в метода за преодоляване на метода на основния случай (метод на преодоляване) трябва да има ограничен достъп за достъп от метода на родителски клас. Например, ако методът на базов клас е защитен, тогава не е позволен дъщерният метод частен.
- Когато се сравнява по отношение на производителността, претоварването има по-добра производителност в сравнение с Overriding, тъй като претоварването на метода се извършва по време на компилация.
- Типът на връщане на метод никога не е част от метода Overloading, следователно няма значение дали различните претоварени методи имат един и същ или различен тип връщане, докато в Method Overriding return type и методите на родител и базов клас трябва да са абсолютно еднакви,
- Когато говорим за свързване, Overloading има статично свързване, докато Overriding има динамично свързване.
- Изключението, хвърлено по метод, няма значение за претоварения метод, ако един метод хвърля изключение, други претоварени методи могат / не могат да хвърлят същото или различно изключение, но в случай на Overriding, методът Overriding (методът в производен клас) не може да хвърли изключение от по-висока йерархия от методът, който е отменен (метод в базовия клас).
- Всички спецификатори като частни, крайни и статични не могат да се използват в метод 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 с инфографика и сравнителната таблица. Може да разгледате и следните статии, за да научите повече -
- Функционално програмиране срещу OOP
- Какво е преобладаващо в JavaScript?
- Как работи Претоварването в PHP?
- Преглед на претоварването в C #
- По-важно в Java
- Python Overloading
- Претоварване и отмяна в C #