Разлика између насљеђивања и полиморфизма

Аутор: Laura McKinney
Датум Стварања: 1 Април 2021
Ажурирати Датум: 15 Може 2024
Anonim
Разлика између насљеђивања и полиморфизма - Технологија
Разлика између насљеђивања и полиморфизма - Технологија

Садржај


Наслеђивање омогућава, поновну употребу кода и полиморфизам, појаву једне функције различитог облика. Основна разлика између насљеђивања и полиморфизма је та што насљеђивање омогућава да се већ постојећи код поново употребљава у програму, а полиморфизам омогућава механизам да динамички одлучи у који облик функције се позива.

  1. Упоредни графикон
  2. Дефиниција
  3. Кључне разлике
  4. Закључак

Упоредни графикон

Основе за упоређивањеНаслеђивањеПолиморфизам
ОсновниНасљеђивање ствара нову класу користећи својства већ постојеће класе.Полиморфизам је у основи уобичајено сучеље вишеструког облика.
ИмплементацијаНасљеђивање се у основи проводи на часовима.Полиморфизам се у основи проводи на функцији / методама.
УпотребаПодржати концепт поновне употребе у ООП-у и смањује дужину кода.Омогућује објекту да одлучи у који ће облик функције бити позван када је у току компилације (преоптерећење) као и вријеме извођења (прегласавање).
ОбрасциНасљеђивање може бити појединачно насљеђивање, вишеструко насљеђивање, вишеслојно насљеђивање, хијерархијско насљеђивање и хибридно насљеђивање.Полиморфизам може бити временски полиморфизам (преоптерећење) или полиморфизам током прелетања (прекомерно).
ПримерТабела класе може наследити карактеристике класичног намештаја, као што је сто је намештај.Класа_предавања класе такође може имати функцију сет_цолор (), а класа Дининг_табле такође може имати функцију сет_цолор (), тако да о облику функције сет_цолор () које се може позвати може се одлучити у оба времена, време компилације и време извођења.


Дефиниција наследства:

Насљеђивање је једно од кључних обиљежја ООП-а, које снажно подржавају „поновну употребу“. Поновна употреба може се описати као креирање нове класе поновном употребом својстава постојеће класе. У наслеђивању постоји основна класа која наслеђује изведена класа. Када класа наследи било коју другу класу, члан (и) основне класе постају чланови (и) изведене класе.

Општи облик наслеђивања класе је следећи:

цласс-цласс-наме-наме: спецификатор приступа басе-цласс-наме {// тело класе};

Овде, спецификатор приступа пружа начин приступа (приватним, јавним, заштићеним) члановима у основној класи изведеној класи. Ако нема спецификатора приступа, подразумевано се сматра „приватним“. У Ц ++, ако је изведена класа „струцт“, тада је спецификатор приступа подразумевано „јавни“.

Код Ц ++ наслеђивање се може постићи у пет облика. Они се могу класификовати као:

  • Једно наслеђивање (само једна супер класа)
  • Вишеструко наслеђивање (неколико суперкласа)
  • Хијерархијско наслеђивање (једна супер класа, много подразреда)
  • Вишеструко наслеђивање (изведено из изведене класе)

У Јави класа наслеђује другу класу помоћу кључне речи „ектендс“. У Јави се основна класа назива супер класа, а изведена класа се назива подкласа. Подкласи не могу приступити они чланови основне класе који су декларирани као „приватни“. Општи облик насљеђивања класе на Јави је сљедећи.


класа изведена-класа-име проширује име основне класе {// тело класе};

Јава не подржава насљеђивање вишеструког насљеђивања, док подржава вишеразинску хијерархију. У Јави понекад супер класа можда жели сакрити детаље имплементације и неки део тих података чини „приватним“. Као и у Јави, подразред не може приступити приватним члановима преткласа и ако подразред жели приступити или иницијализирати те чланове, Јава нуди решење. Подразред може упутити чланове свог непосредног подразреда користећи кључну реч „супер“. Запамтите, можете приступити само члановима непосредног суперкласа.

'Супер' има два општа облика. Прво је да се позива конструктор супер класе. Друго је приступити члану преткласа који је сакрио члан подразреда.

// први облик позивања конструктора. класа суппер_цласс {суппер_цласс (аргумент_лист) {..} // конструктор супер класе}; класа суб_цласс проширује суппер_цласс {суб_цласс (аргумент_лист) {..} // конструктор суб_цласс супер (аргумент_лист); // суб_цласс позива конструктора супер класе}};

// други за супер класу суппер_цласс {инт и; } класа суб_цласс проширује суппер_цласс {инт и; суб_цласс (инт а, инт б) {супер.и = а; // и супер класе и = б; // и подкласе}};

Дефиниција полиморфизма

Израз полиморфизам једноставно значи 'једна функција, више облика'. Полиморфизам се постиже и током компајлирања и у току рада. Полиморфизам сабирног времена постиже се „преоптерећењем“, док се полиморфизам времена извођења постиже „прегласавањем“.

Полиморфизам омогућава објекту да одлучи „који облик функције треба позвати када“ у оба, компајлирају време и време извођења.
Разговарајмо о првом концепту преоптерећења. Код преоптерећења дефинирамо функцију у класи више пута с различитим, типом података и бројем параметара, док функција која се преоптерећује мора имати исти тип повратка. Већина преоптерећених функција су углавном конструктори класе.

преоптерећење класе {инт а, б; публиц: инт оверлоад (инт к) {// прво конструктор оверлоад () а = к; ретурн а; } инт преоптерећење (инт к, инт и) {// друго конструктор преоптерећења () а = к; б = и; вратити а * б; }}; инт маин () {преоптерећење О1; О1.опрема (20); // први конструктор оверлоад () позива О1.оверлоад (20,40); // други позив конструктора оверлоад ()}

Сада, разговарајмо о другом облику полиморфизма, тј. Превладавању. Концепт превладавања може се применити само у функцију класа које такође примењују концепт наследства. У Ц ++ функцији коју треба прегласити претходи кључна реч „виртуелна“ у основној класи и редефинира у изведеној класи са истим прототипом, осим кључне речи „виртуелно“.

цласс басе {публиц: виртуал воид фунцт () {// виртуална функција базе цоут << класе << "Ово је функција басе цлассс ()"; }}; цласс извед1: јавна база {публиц: воид фунцт () {// виртуална функција основне класе редефинирана у изведеном ц1 цоут << "Ово је изведена1 класа фунцт ()"; }}; инт маин () {база * п, б; изведен1 д1; * п = & б; п-> фунцт (); // позив на функцију основне класе (). * п = & д1; ретурн 0; }

  1. Насљеђивање ствара класу која свој значај потиче из већ постојеће класе. С друге стране, полиморфизам је интерфејс који се може дефинисати у више облика.
  2. Насљеђивање се примјењује на класама док се полиморфизам примјењује на методе / функције.
  3. Како насљеђивање омогућава изведеној класи да користи елементе и методе дефиниране у основној класи, изведена класа не треба те елементе дефинирати или поновно обрађивати, тако да можемо рећи да повећава поновно кориштење кода и, на тај начин, смањује дужину кода . С друге стране, полиморфизам омогућава предмету да одлучи који облик методе жели да користи и у току компилације и у току рада.
  4. Насљедство се може класификовати као једно насљеђивање, вишеструко насљеђивање, вишеслојно насљеђивање, хијерархијско насљеђивање и хибридно насљеђивање. С друге стране, полиморфизам је класификован као преоптерећење и превладавање.

Закључак:

Наслеђивање и полиморфизам су међусобно повезани појмови, јер се динамички полиморфизам примењује на класе које такође примењују концепт наследства.