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

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

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

Видео: Разлика между замяна и претоварване
Видео: Настя и сборник весёлых историй 2024, Юли
Anonim

Замяна срещу претоварване

Методът Overriding и method Overloading са две концепции/техники/функции, които се срещат в някои езици за програмиране. И двете концепции позволяват на програмиста да предостави различни реализации за методи с едно и също име. Замяната на метод позволява на програмиста да предостави алтернативна реализация в рамките на подклас на метод, който вече е дефиниран в неговия супер клас. Претоварването на метод позволява на програмиста да предоставя различни имплементации на множество методи с едно и също име (в рамките на един и същи клас).

Какво е отмяна?

Както бе споменато по-горе, един клас може да разшири суперклас или родителски клас в обектно-ориентирани езици за програмиране. Дъщерен клас може да има свои собствени методи или може по избор да има свои собствени реализации на методи, които вече са дефинирани в неговия родителски клас (или един от неговите големи родителски класове). Така че, когато се случи последното, това се нарича отмяна на метода. С други думи, ако дъщерният клас предоставя имплементация на метод със същата сигнатура и тип връщане като метод, който вече е дефиниран в един от неговите родителски класове, се казва, че този метод е отменен (заменен) от имплементацията на дъщерния клас. Така че, ако има отменен метод в клас, системата за изпълнение ще трябва да реши коя реализация на метода се използва. Този проблем се разрешава чрез разглеждане на точния тип обект, който се използва за извикването му. Ако обект от родителския клас се използва за извикване на заменения метод, тогава се използва имплементацията в родителския клас. По същия начин, ако се използва обект от дъщерния клас, тогава се използва изпълнението на дъщерния клас. Съвременните езици за програмиране като Java, Eifell, C++ и Python позволяват заместване на методите.

Какво е претоварване?

Претоварването на метод е функция, осигурена от някои езици за програмиране за създаване на повече от един метод с едно и също име, но с различни входни и изходни типове. В съвременните езици за програмиране като Java, C, C++ и VB. NET тази функция е налична. Можете да претоварите метод, като създадете друг метод със същото име, но с различен подпис на метода или различен тип връщане (или и двете). Например, ако имате method1(type1 t1) и method1(type2 t2) в един и същи клас, тогава те са претоварени. Тогава системата ще трябва да реши кой да бъде изпълнен, когато бъде извикан. Това разграничаване се прави чрез разглеждане на типа на параметъра(ите), предадени на метода. Ако аргументът е от тип1, тогава се извиква първата реализация, докато ако е от тип2, тогава се извиква втората реализация.

Каква е разликата между замяна и претоварване?

Въпреки че отмяната на метода и претоварването на метода се използват за предоставяне на метод с различни реализации, има ключови разлики между тези две концепции/техники. На първо място, субектите на пренатоварване на метод винаги остават в различни класове, докато субектите на претоварване на метод остават в рамките на един и същи клас. Това означава, че замяната е възможна само в обектно-ориентирани езици за програмиране, които позволяват наследяване, докато претоварването може да бъде налично и в необектно-ориентиран език. С други думи, вие отменяте метод в супер класа, но претоварвате метод в рамките на вашия собствен клас.

Друга разлика е, че заменените методи имат едно и също име на метод, сигнатура на метода и тип на връщане, но претоварените методи трябва да се различават или по сигнатурата, или по типа на връщането (името трябва да е същото). За да се прави разлика между два пренатоварени метода, точният тип обект, който се използва за извикване на използвания идентификатор на методите, докато за разграничаване между два претоварени метода се използват типовете параметри. Друга ключова разлика е, че претоварването се разрешава по време на компилиране, докато отмяната се разрешава по време на изпълнение.

Препоръчано: