Рецоммендед, 2020

Избор Уредника

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

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

Цомпарисон Цхарт

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

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

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

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

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

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

У Ц ++, наслеђивање се може постићи у пет облика. Могу се класификовати као: -

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

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

 цласс изведено-име-класе ектендс басе-цласс-наме {// тело класе}; 

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

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

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

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

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

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

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

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

 цласс басе {публиц: виртуал воид фунцт () {// виртуална функција базне класе цоут << "Ово је фунцт основне класе ()"; }}; цласс изведена1: публиц басе {публиц: воид фунцт () {// виртуална функција основне класе редефинисана у изведеном разреду цоут 

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

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

Закључак:

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

Top