Увод о превладавању ООП-ова

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

Потреба за прегласавањем метода

Следе методе превазилажења:

  • Превладавање метода полиморфизма током извођења помаже да се постигне полиморфизам времена рада у објектно оријентисаним програмским језицима попут ц ++, јава, ц #, итд.
  • Полиморфизам значи имати много облика, тј. Један потпис и више дефиниција. у објектно оријентисаним језицима када и изведена и родитељска класа имају исто име и потпис функције, тада једнократни преводилац решава дефиницију да ли је потребно позвати. Полиморфизам током извођења значи везање дефиниције методе са методом која се зове догађа се током извођења програма. Омогућује имплементацију полиморфизма „један потпис вишеструке дефиниције“. Ова функција користи динамичку отпрему метода која има моћан концепт објектно оријентисаног дизајна за доношење поновне употребе и робусности. Надјачавање методе омогућава нам позив методе у било коју њену изведену класу без познавања врсте објекта изведене класе.
  • Користећи ову функцију, можете имплементирати специјализовану дефиницију у генеричку функцију која је наслијеђена из њеног суперкласа.

Како превладавање функционира у ООП-овима?

Ниже објашњење каже како функционисање превладавања:

  • ООП-ови, помозите нам да применимо полиморфизам рада док наслеђујемо класе у другу. Погледајмо рад превладавања у ООП-има. Касније претпоставимо да имамо животињу супер класе која има две функције да говоре и једу. Постоје две поткласе мачка и пас које проширују назив суперкласе животиња.
  • Ове двије подкласе користе исте функције говоре и једу, али мијењају имплементацију, али задржавајући потпис метода истог. Сада у нашем главном методу ако ове функције зовете одабиром референтне варијабле, само у време извођења одлучиће се која функција треба да се позове. На пример, ако објект има разлику од дечије класе која је мачка или пас, функција одговарајуће класе ће се назвати на други начин ако објект има референцу родитељске класе, тада ће се позвати функција животињског разреда.
  • Овдје бисмо требали видјети да функција која се зове не овиси о врсти референтне варијабле. Ово одлучује преводилац током извођења, само што помаже у имплементацији полиморфизма рунтимеа. Такође помаже да се имплементира специјализована дефиниција методе генеричке дефиниције методе у родитељској класи.

Шифра:

class Animal(
//Overridden method
public void eat()
(
System.out.println("Animal is eating");
)
public void speak()
(
System.out.println("Animal is speaking");
)
)
class Cat extends Animal(
//Overriding method
public void eat()
(
System.out.println("Cat is eating");
)
public void speak()
(
System.out.println("Cat is meowing");
)
)
class Dog extends Animal(
//Overriding method
public void eat()
(
System.out.println("Dog is Barking");
)
public void speak()
(
System.out.println("Dog is speaking");
)
)
public class Test(
public static void main(String() args)(
Animal an=new Dog();
Animal an1 = new Cat();
Animal an2 = new Animal();
an.speak();
an.eat();
an1.speak();
an1.eat();
an2.eat();
)
)

Излаз:

Напомена: Референтна варијабла дечијег типа не може се користити за задржавање референце на родитељски тип.

Правила за прегласавање метода

Следе Правила прегласавања:

Правило бр. 1

Листа параметара декларираних у функцији надређене класе треба да се подудара са списком параметара наведених у дефиницији превладавајуће методе у подређеној класи.

На пример:

Метода у родитељској класи

public int test1(int a);

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

Правило бр. 2

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

На пример:

Метода у родитељској класи

public Object test1(int a);

Метода у дечијем разреду

public String test1();

Неисправан

Метода у родитељској класи

public String test1(int a);

Метода у дечијем разреду

public Object test1();

Правило бр. 3

Спецификатор приступа присутан у методи надређене класе мора бити једнако рестриктиван или рестриктивнији од методе који га надјачава у подређеној класи.

Неисправан

Метода у родитељској класи

public int test1(int a);

Метода у дечијем разреду

private int test1() ; // more restrictive than public one

Правило бр. 4

Само метода инстанце са спецификатором приступа као јавно заштићеним или заданим може се надјачати. То је зато што само овај инстанц може наслиједити његов подразред и тако рећи да је прегласао. У случају да је метода инстанце наведена у родитељској класи рестриктивнији пример јавни метод, онда се неће наследити у њеној поткласи и ако неко дефинише исту методу у подразреду, тај се сценарио не узима као метода која превладава јер јавне методе не могу Ако се наследи то се не може надјачати.

На пример:

Метода у родитељској класи

public int test1(int a); //can be inherited and overridden

Метода у дечијем разреду

private int test1();

Неисправан

Метода у родитељској класи

private int test1(int a); //can not be inherited and overridden

Метода у дечијем разреду

private int test1();//not overriding method of the parent class

Сматра се новим приватним методом дечије класе

Правило бр. 5

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

class Animal(
//Overridden method
public void eat()
(
System.out.println("Animal is eating");
)
public void speak()
(
System.out.println("Animal is speaking");
)
)
class Dog extends Animal(
//Overriding method
public void eat()
(
System.out.println("Dog is Barking");
)
public void speak()
(
super.speak(); // Here super keyword is used to call the speak function of the super class.ieAnimal
)
)
public class Test(
public static void main(String() args)(
Animal an=new Dog();
Animal an2 = new Animal();
an.speak();
an.eat();
an2.eat();
)
)

Излаз:

Правило бр. 6

Конструктор класе не може бити надјачан својим подкласама јер конструктор две класе не може бити исти.

Правило бр. 7

Руковање изузецима у превладавању

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

Правило бр. 8

Могуће је и прегласавање метода на вишеслојном насљеђивању.

Шифра:

class Creature (
//Overriding method
public void eat()
(
System.out.println("Creature is eating");
)
public void speak()
(
System.out.println("Creature is speaking");
)
)
class Animal extends Creature(
//Overridden method
public void eat()
(
System.out.println("Animal is eating");
)
public void speak()
(
System.out.println("Animal is speaking");
)
)
class Dog extends Animal(
//Overriding method
public void eat()
(
System.out.println("Dog is Barking");
)
public void speak()
(
System.out.println("Dog is speaking");
)
)
public class Test(public static void main(String() args)(
Creature an=new Dog();
Animal an1 = new Animal();
Animal an2 = new Dog();
an.speak();
an.eat();
an1.speak();
an1.eat();
an2.eat();
)
)

Излаз:

Правило бр. 9

Правила начина превладавања у Јави

  • Синхронизована метода може се лако надјачати не-синхронизованом методом и обрнуто.
  • Апстрактна метода присутна у апстрактним класама или сучељима треба преписати да би се декларисаним методама омогућила специфична имплементација, јер ће у противном показати грешку у времену компилације.
  • Дефинисање статичке методе с истим именом као и статичка метода присутна у родитељској класи позната је као метода која скрива не превладавање методе јер не проводи полиморфизам рада.
  • Коначне методе се не могу превладати.

Правило бр. 10

Превладавање метода у Ц ++

Прегласавање метода у ц плус постиже се декларисањем методе као виртуелне. Виртуелна кључна реч користи се за постизање полиморфизма током ц ++. Док су у Јави све функције по дефаулту узете као виртуалне.

Правило бр. 11

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

Прегласавање метода Метода Преоптерећење
class A(
public void test()(
System.out.println("In class A");
)
)
class B extends A(
public void test()(
System.out.println("In class A");
))public class Test(
public static void main(String() args)(
A a=new B();
a.test();
A b =new A();
b.test();
))
class A(
public void test()(
System.out.println("Method without arguments");
)
public void test(int x)(
System.out.println("Method with arguments");
System.out.println(x);
))public class Test(
public static void main(String() args)(
A a=new A();
a.test();
a.test(2);
)
)

Излаз:

Када се користи прегласавање метода?

Следе методе коришћења Оверридинг:

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

Закључак

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

Препоручени чланци

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

  1. Превладавање у ПХП-у
  2. Прегласавање у ЈаваСцрипт-у
  3. Шта је ООП?
  4. Прегласавање метода у Ц #
  5. Примери прегласавања у Јави
  6. Статичка метода ЈаваСцрипт | Како радити са примерима

Категорија: