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

Сврха наслеђивања у развоју софтвера је да олакша поновну употребу сигурног и поузданог софтвера. Једна од главних предности коришћења наслеђивања је та што уклања сувишни код у вашим програмима.

Како ради наследство

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

Стварни пример како наслеђе функционише био би разматрање плодова. Ово је широка етикета која служи за уврштавање низа различитих предмета.

Јабука је воће, а поморанџа такође. Међутим, поморанџа није јабука, па не бисте имали воће као један од залиха да имате продавницу. Можда бисте у свом инвентару могли да имате одељак о воћу, а испод тог одељка имали бисте конкретније предмете попут јабука и поморанџи.

Тако функционише наследство.

Коришћење наслеђивања у Јави

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

На пример, Ц ++ је такође објектно оријентисани програмски језик. Ц ++ подржава оно што је познато као вишеструко наслеђивање, док Јава подржава само једно наслеђивање.

То значи да у Јави родитељска класа може имати много подређених класа, али свака подређена класа може имати само једну родитељску класу (једно наслеђивање). Међутим, постоји начин да се у Јави постигне индиректно вишеструко наслеђивање стварањем односа баке и детета, родитеља и детета.

Креирање родитељске класе у Јави

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

Пример класе родитеља воћа


воће јавне класе {
// Изјава о променљивој
заштићено семе гудача;
заштићена жица скинЦолор;
заштићен Стринг укус;
// Подразумевани конструктор
јавно воће () {
семе = "";
скинЦолор = "";
укус = "";
}
// Примарни конструктор
јавно воће (семе низа, боја боје коже, укус низа) {
тхис.сеед = семе;
тхис.скинЦолор = скинЦолор;
тхис.тасте = укус;
}
// гетери и постављачи
јавни Стринг гетСеед () {
вратити семе;
}
публиц воид сетСеед (Стринг сеед) {
тхис.сеед = семе;
}
јавни Стринг гетСкинЦолор () {
ретурн скинЦолор;
}
јавна празнина сетСкинЦолор (Стринг скинЦолор) {
тхис.скинЦолор = скинЦолор;
}
јавни Стринг гетТасте () {
вратити укус;
}
публиц воид сетТасте (укус низа) {
тхис.тасте = укус;
}
// јести метод
јавна празнина еат () {
// општи код о једењу воћа
}
// метода сокова
јавни воид сок () {
// општи код како сочити воће
}
}

Један од најзапаженијих аспеката горе наведене родитељске класе је модификатор приступа који се користи са сваком декларацијом променљиве. Модификатор „заштићеног“ приступа идеалан је за употребу у родитељским класама јер спречава не-подређене класе да добију приступ атрибутима података родитељске класе.

Даље у коду упознаћете се са конструкторима, гетерима и постављачима који су општи блокови за било коју Јава класу. На крају, упознали сте се са две методе (сок и јести) које су створене у матичној класи нашег програма, јер су универзалне за све воће - све воће може да се једе и сочи.

Креирање одељења за децу на Јави

Дечје класе се обично називају специјализованим или изведеним класама јер наслеђују стање и понашање родитеља и често прилагођавају ове атрибуте како би биле прецизније.

Настављајући са нашим примером, могли бисте да видите зашто би наранџа била одговарајућа дечја класа горе наведене класе воћа.

Пример наранџасте деце


јавна класа наранџа продужава воће {
// декларација променљиве
привате инт супремес;
// подразумевани конструктор
јавни наранџасти () {
супремес = 0;
}
// примарни конструктор
јавна наранџаста (семе низа, боја боје коже, укус низа, инт супремес) {
супер (семе, боја коже, укус);
тхис.супремес = супремес;
}
// гетери и постављачи
јавни инт гетсупремес () {
ретурн супремес;
}
публиц воид сетсупремес (инт супремес) {
тхис.супремес = супремес;
}
// јести метод
јавна празнина еат () {
// како јести поморанџу
}
// метода сокова
јавни воид сок () {
// како сок и поморанџа
}
// метода љуштења
јавни воид пеел () {
// како ољуштити поморанџу
}
}

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

У нашем примеру изнад класа дете (наранџаста) проширује родитељску класу (воће). Стога стање и понашање класе воћа сада може да приступи и модификује наранџаста класа.

Јединствени атрибут који има наша наранџаста класа идентификује се са променљивим именом супремес (што је званични назив за мале сегменте пронађене у поморанџама). Овде долази до изражаја специјализација; немају сва воћа супреме, али све поморанџе имају, па је резервисање променљиве супреме за класу наранџа логично.

Додавање методе „коре“ постојећим методама „јести“ и „сок“ је такође логично, јер иако се не може ољуштити све воће, наранџе се често ољуште.

Имајте на уму да, ако не намеравамо да изменимо постојеће методе „једења“ и „сока“, не бисмо их требали укључити у нашу класу наранџе. Методе у класи наранџе надјачавају било коју сличну методу у класи воћа. Дакле, ако се све воће једе и сочи на исти начин, не бисмо требали да стварамо ове методе у класи наранџе.

Конструктори улога играју у наслеђе

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

Вратимо се нашем примеру, сваки пут када се креира нови наранџасти предмет ствара се и воћни објект јер је наранџа воће.

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

Метода „супер“ у нашем примарном конструктору изнад је неопходна јер одређује да је примарни конструктор - и не подразумевани конструктор - родитељске класе воћа треба позивати кад год је наранџасти објекат са параметрима створена.

Сада можете користити наслеђе у Јави

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

Кредит за слику: Андреас Вохлфахрт /Пексела

Емаил
Како наследити објектно оријентисани код

Исправно објектно оријентисано програмирање значи да морате знати о наслеђивању и како то може поједноставити кодирање и смањити грешке.

Прочитајте следеће

Повезане теме
  • Програмирање
  • Јава
  • Објектно оријентисано програмирање
О аутору
Кадеисха Кеан (3 чланака објављено)

Кадеисха Кеан је програмер софтвера у пуном слогу и писац техничких / технолошких технологија. Она има изразиту способност да поједностави неке од најсложенијих технолошких концепата; производећи материјал који лако може разумети било који технолошки новак. Одушевљена је писањем, развојем занимљивог софтвера и путовањем по свету (кроз документарне филмове).

Више од Кадеисха Кеан

Претплатите се на наш билтен

Придружите се нашем билтену за техничке савете, прегледе, бесплатне е-књиге и ексклузивне понуде!

Још један корак…!

Молимо потврдите своју адресу е-поште у е-поруци коју смо вам управо послали.

.