Ключова разлика : Претоварването означава да има два метода от един и същи клас със същото име и с различни типове параметри, докато подмяната означава да имаме два различни метода в един и същи клас със същите типове параметри, но с различни реализации.
Преодоляването и претоварването на методите са две понятия или техники, използвани в езиците за програмиране на Java. И двете концепции позволяват на програмиста да осигури различни реализации за методи под същото име. В тази статия се прави разлика между двете концепции за програмиране.

Претоварването на функциите или претоварването на методите позволяват създаването на няколко метода под едно и също име, в един и същи клас, но различни един от друг във входния и изходния тип на функцията. Тя се определя просто като способността на една функция да изпълнява различни задачи.
При претоварване реализациите на метода споделят едно и също име, защото изпълняват подобни задачи. Също така, претоварването се счита за полиморфно по природа. Функциите, които имат различни реализации, зависят от техните специфични типове аргументи. Обикновено се свързва със статични езици за програмиране, което налага проверка на типа във функционалните повиквания. Също така се счита за практично, тъй като позволява на програмиста да напише няколко различни метода в един и същи клас. Въпреки това, при претоварване на процесора по време на работа се променя името на всички претоварени методи, което може да бъде проблем.

Преодоляването на метода, в обектно-ориентираното програмиране, е функция, която позволява на подклас или детска класа да предоставят специфично изпълнение на метод, който вече е осигурен от един от неговите супер-класове или родителски класове. Реализацията в подкласа замества или замества реализацията в родителския клас, като осигурява метод под същото име, същите параметри или подпис и същия тип връщане като метода в родителския клас.
При заместване на метода функциите се кодират, за да изпълняват специфични задачи в програмата. Преодоляването зависи от наличието на основна функция за неговия външен вид. Тук изпълнената функция се определя от обекта, който се използва за извикване, т.е. ако обект от родителски клас се използва за извикване на метода, тогава функцията в родителския клас ще бъде изпълнена. Преобладаването е полиморфно по природа; помага за проектиране на програми, базирани на първия скрит параметър, който може да бъде разрешен по време на изпълнение. Има някои езици в Java, които позволяват на програмист да предотврати подмяната на метод.
Сравнение между претоварване и отхвърляне:
Претоварването | Замяната | |
дефиниция | Това означава да имаме методи от един и същи клас под едно и също име, но всеки метод има различни параметри или има същите параметри с различни типове и ред. | Това означава да имате подклас със същите методи под същото име и точно същия тип параметри и същия тип връщане като супер клас. |
значение | Това означава, че повече от един метод споделят едно и също име в същия клас, но имат различен подпис. | Това означава, че методът на базовия клас се дефинира отново в извлечения клас със същия подпис. |
Поведение | Той добавя или разширява поведението на методите. | Той променя съществуващото поведение на даден метод. |
полиморфизъм | Това е полиморфизъм на времето за компилация. | Това е полиморфизъм по време на работа. |
Статичен метод | Статичният метод може да бъде претоварен. | Статичният метод не може да бъде отменен. |
Връзка | Статична връзка. | Динамична връзка. |
наследяване | Тя може или не може да изисква наследяване. | Тя винаги изисква наследство. |
сдружаване | Обикновено се свързва със статични езици на програмата. | Обикновено се свързва с обектно ориентирани програми. |
Подпис | Методите имат различен подпис. | Методите трябва да имат един и същ подпис. |
скорост | Тя е по-бърза от преодоляването. | То е бавно в сравнение с претоварването. |
класове | Той не изисква повече от един клас за претоварване. | Тя изисква поне два класа за претоварване. |
ниво | Методите могат да имат всяко ниво на достъп. | Методите имат едно и също или широко ниво на достъп. |
пример | Class Add { int sum (int a, int b) { връщане a + b; } int sum (int a) { връщане на + 10; } } | Клас А // Супер клас { невалиден дисплей (int num) { print num; } } // Клас Б наследява клас А Клас Б // Подклас { невалиден дисплей (int num) { print num; } } |