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

Пратите овај водич да бисте сазнали како да преоптеретите или замените методе у Јави.

Шта је преоптерећење метода?

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

Компајлер зна који метод да користи тако што проверава тип, број параметара и редослед којим су постављени.

Повезан: Истраживање наслеђа у програмском језику Јава

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

Ова врста полиморфизма позната је и као статичко или рано везивање.

instagram viewer

Погледајте пример преоптерећења методе испод:

цласс Аритхметиц {
инт коцка (инт к) {
ретурн к * к * к;
}
двострука коцка (дупла к) {
ретурн к * к * к;
}
флоат коцка (флоат к) {
ретурн к * к * к;
}
јавна статичка воид главна (Стринг [] аргс) {
Аритхметиц миМултиплицатион = нев Аритхметиц ();
Систем.оут.принтлн ("Коцка од 5 је" + миМултиплицатион.цубе (5));
Систем.оут.принтлн ("Коцка 5.0 је" + миМултиплицатион.цубе (5.0));
Систем.оут.принтлн ("Коцка од 0,5 је" + миМултиплицатион.цубе (0,5));
}
}

Излаз:

Коцка 5 је 125
Коцка 5.0 износи 125,0
Коцка 0,5 износи 0,125

Горњи код показује како можете добити коцку различитих врста (инт, двоструко, пловак) користећи исти метод.

Генерално, преоптерећење метода се користи за дефинисање сличних метода са различитим типовима параметара.

Шта је надјачавање метода?

Ово се односи на другачију примену методе у подкласи. Метода мора да је већ дефинисана у родитељској класи.

Надређена метода (тј. Она у подкласи) мора имати исти потпис методе као она у суперкласи. Тип поврата методе замене може бити исти или подтип типа у суперкласи.

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

цласс Аццоунт {
јавна воид порука () {
Систем.оут.принтлн ("
Хвала вам што сте отворили рачун код нас! ");
}
публиц статиц воид маин (Стринг аргс []) {
Налог миАццоунт = нови рачун ();
Штедња миСавингс = нова уштеда ();
ФикедДепосит миФикедДепо = нови ФикедДепосит ();
миАццоунт.мессаге ();
миСавингс.мессаге ();
миФикедДепо.мессаге ();
}
}
цласс Штедња продужава рачун {
јавна воид порука () {
Систем.оут.принтлн ("
Хвала вам што сте отворили штедни рачун код нас! ");
}
}
класа ФикедДепосит проширује налог {
јавна воид порука () {
Систем.оут.принтлн ("
Хвала вам што сте отворили рачун са фиксним депозитом код нас! ");
}
}

Излаз:

Хвала вам што сте отворили рачун код нас!
Хвала вам што сте отворили штедни рачун код нас!
Хвала вам што сте отворили рачун са фиксним депозитом код нас!

Горњи пример показује како метода порука () је замењен у поткласама Штедња и Фиксни депозит. Приказаће се различите поруке за власнике банковних рачуна са штедним рачуном и оне који имају рачун са фиксним депозитом.

Повезан: Шта треба да знате о коришћењу жица у Јави

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

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

коначна воид порука () {
Систем.оут.принтлн ("
Хвала вам што сте отворили рачун код нас! ");
}

Када подкласа покуша да је замени, догодиће се грешка у компилацији.

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

Понекад ће вам можда требати приступ замењеној методи у оквиру методе замене. Можете користити кључну реч супер праћен оператором тачака (.) и назив методе у таквом случају.

Размотрите суперкласу Животиња.

цласс Анимал {
јавни воид потез () {
Систем.оут.принтлн ("
Могу да се крећем. ");
}
}

Испод је поткласа, тзв Рибе, то поништава потез():

класа Риба продужава Анимал {
јавни воид потез () {
Систем.оут.принтлн ("
Ја умем да пливам.");
супер.мове ();
}
публиц статиц воид маин (Стринг аргс []) {
Риба Тилапиа = нова Риба ();
Тилапиа.мове ();
}
}

Излаз:

Ја умем да пливам.
Могу се кретати.

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

Једноставан код са полиморфизмом

Замена метода и преоптерећење су важне за поједностављење кода, а једноставни код је добра пракса.

Зашто? Замислите сложену базу кодова са више улазака и излаза него Гранд Централ Статион. Сад замислите да разорна грешка почне да уништава ваш напоран рад пред вашим очима. Морате изоловати извор заразе и то морате учинити брзо.

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

Следеће на вашој листи учења за Јава требало би да ради са низовима. То су важне структуре података које се користе за чување серија података.

Емаил
Како створити и извршити операције над низовима на Јави

Учите Јава? Нека низови лако обрађују ваше податке.

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

Повезане теме
  • Програмирање
  • Јава
  • Водичи за кодирање
О аутору
Јероме Давидсон (Објављено 15 чланака)

Јероме је писац особља у МакеУсеОф-у. Обрађује чланке о Програмирању и Линуку. Такође је крипто ентузијаст и увек прати крипто индустрију.

Више од Јеромеа Давидсона

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

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

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

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

.