Uvod o prevladavanju OOP-ova

Dok implementira koncept nasljeđivanja u oopsu, sve funkcije nadređene klase koriste sve njegove izvedene klase. Ali u slučaju ako jedna izvedena klasa želi specifičnu implementaciju funkcije koja je deklarirana u roditeljskoj klasi, ali koristi isto ime, isti potpis i istu vrstu povratka, tada se koristi prevladavajuća značajka. Poništavanje omogućuje dječjoj klasi da redefinira funkciju koja je već definirana u roditeljskoj klasi ili pretklasi. Na taj se način može koristiti obje definicije ako se specificira objekt klase dok se zove metoda. Na primjer, neka postoji funkcija zbrajanja i u roditeljskoj i u dječjoj klasi, a dok pozivamo funkciju koristimo objekt podređene klase, tada će se pozvati metoda prisutna u podređenoj klasi, a umjesto toga, ako koristite objekt roditeljske klase, tada je metoda prisutna u roditeljskoj klasi će se pozvati. kaže se da ova metoda u dječjoj klasi nadjačava metodu prisutnu u njezinim superrazredima.

Potreba za prevladavanjem metoda

Slijede metode prevladavanja:

  • Prevladavanje metode polimorfizma tokom rada pomaže postići postizanje polimorfizma u objektnim programskim jezicima poput c ++, java, c #, itd.
  • Polimorfizam znači imati više oblika, tj. Jedan potpis i više definicija. u objektno orijentiranim jezicima kada i izvedena i roditeljska klasa imaju isto ime i potpis funkcije, tada će prevoditelj u jednom trenutku riješiti definiciju treba li je pozvati. Polimorfizam vremena izvođenja znači vezanje definicije metode s metodom koja se zove događa se tijekom izvođenja programa. Omogućuje primjenu polimorfizma „jedan potpis višestruke definicije“. Ova značajka koristi dinamičku metodu otpreme koja ima moćan koncept objektno orijentiranog dizajna za donošenje ponovne uporabe i robusnosti koda. Nadjačavanje metode omogućava nam poziv metode u bilo koju njezinu izvedenu klasu bez poznavanja vrste objekta izvedene klase.
  • Koristeći ovu značajku možete implementirati specijaliziranu definiciju u generičku funkciju koja je naslijeđena od njezinog superklasa.

Kako prevladavanje funkcionira u OOP-ovima?

Niže objašnjenje kaže kako prijevladavanje funkcionira:

  • OOP-ovi, pomozite nam implementirati polimorfizam vremena dok nasljeđujemo klase u drugo. Pogledajmo rad prevladavanja u OOP-ovima. Kasnije pretpostavimo da imamo životinju superklasa s dvije funkcije koje govore i jedu. Postoje dvije potklase mačka i pas koje proširuju naziv životinja superklasa.
  • Ove dvije podrazrede koriste iste funkcije govore i jedu, ali mijenjaju implementaciju, ali zadržavajući potpis metoda isti. Sada u našoj glavnoj metodi ako ove funkcije zovete odabirom referentne varijable, tada će se samo u vrijeme izvođenja odlučiti koju funkciju treba pozivati. Na primjer, ako objekt ima razliku od dječje klase koja je mačka ili pas, tada će se funkcija odgovarajuće klase nazvati drugačije ako objekt ima referencu roditeljske klase, tada će se nazvati funkcija životinjskog razreda.
  • Ovdje bismo trebali vidjeti da funkcija koja se zove ne ovisi o vrsti referentne varijable. To odlučuje prevoditelj tijekom izvođenja, samo što pomaže u provedbi polimorfizma runtimea. Također pomaže u provedbi specijalizirane definicije metode generičke definicije metode u roditeljskoj klasi.

Kodirati:

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();
)
)

Izlaz:

Napomena: referentna varijabla podređenog tipa ne može se koristiti za zadržavanje reference na roditeljski tip.

Pravila za nadjačavanje metode

Ovo su pravila preskakanja:

Pravilo br. 1

Popis parametara deklariranih u funkciji nadređene klase treba odgovarati popisu parametara spomenutih u definiciji prevladavajuće metode u podređenoj klasi.

Na primjer:

Metoda u roditeljskoj klasi

public int test1(int a);

Metoda u podređenoj klasi - javni niz test1 (); // ovdje neće biti podržana, jer su vrsta i argumenti povratka različiti, ali neće doći do pogreške u sastavljanju. Ova će se metoda smatrati novom metodom dječje klase.

Pravilo br. 2

Povratna vrsta metode prisutne u podređenom razredu mora biti ista ili podvrsta nadređene vrste metode.

Na primjer:

Metoda u roditeljskoj klasi

public Object test1(int a);

Metoda u razredu djece

public String test1();

Netočno

Metoda u roditeljskoj klasi

public String test1(int a);

Metoda u razredu djece

public Object test1();

Pravilo br. 3

Specifikator pristupa koji se nalazi u metodi nadređene klase mora biti jednako restriktivan ili restriktivniji od metode koja ga nadjačava u podređenoj klasi.

Netočno

Metoda u roditeljskoj klasi

public int test1(int a);

Metoda u razredu djece

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

Pravilo br. 4

Samo metoda instance s odrednicom pristupa kao javno zaštićenom ili zadanom može se nadjačati. To je zato što se samo ovom primjerom može naslijediti podklasa i tako se kaže da će se preglasiti. U slučaju da je metoda primjera navedena u roditeljskoj klasi restriktivnija, javna metoda, ona se neće naslijediti u njenom podrazredu i ako neko definira istu metodu u podrazredu, taj se scenarij ne uzima kao metoda koja nadjačava, jer javne metode ne mogu naslijediti to ne može prevladati.

Na primjer:

Metoda u roditeljskoj klasi

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

Metoda u razredu djece

private int test1();

Netočno

Metoda u roditeljskoj klasi

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

Metoda u razredu djece

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

To se smatra novom privatnom metodom dječje klase

Pravilo 5

Super ključna riječ može se koristiti za pozivanje funkcije nadređene klase koja je nadglasana od nje podrazreda.

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();
)
)

Izlaz:

Pravilo br. 6

Konstruktor klase ne može se nadjačati njegovim podrazredima jer konstruktor dviju klasa ne može biti isti.

Pravilo br. 7

Rukovanje iznimkama u prevladavanju.

  • Incase metoda u roditeljskoj klasi ne baca nikakve iznimke, tada je presudnom metodom prisutnom u potklasi moguće baciti samo neprovjerenu iznimku. U slučaju da metoda poništavanja pokazuje provjerenu iznimku, prevoditelj će pokazati pogrešku.
  • Ako metoda u nadređenoj klasi koja se preklapa izbacuje metodu preklapanja u tandemu iznimke koji je prisutan u podrazredu kroz izuzetak iste razine ili njegov podtip u hijerarhiji izuzetaka ili uopće ne postoji iznimka.

Pravilo br. 8

Moguće je i prevladavanje metoda u višeslojnom nasljeđivanju.

Kodirati:

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();
)
)

Izlaz:

Pravilo 9

Pravila načina prevladavanja u Javi

  • Sinkronizirana metoda se može lako poništiti nesinkroniziranom metodom i obrnuto.
  • Apstraktna metoda prisutna u apstraktnim klasama ili sučeljima treba prepisati da bi se deklariranim metodama omogućila specifična implementacija, jer će u protivnom pokazati grešku u vremenu sastavljanja.
  • Definiranje statičke metode s istim imenom kao i statička metoda prisutna u roditeljskoj klasi poznata je kao metoda koja skriva ne prevladavanje metode jer ne provodi polimorfizam vremena izvođenja.
  • Konačne metode se ne mogu nadjačati.

Pravilo br. 10

Nadjačaj metode u C ++

Nadjačavanje metode u c plus postiže se deklariranjem metode kao virtualne. Virtualna ključna riječ koristi se za postizanje polimorfizma vremena u c ++. Dok su u Javi sve funkcije prema zadanom uzete kao virtualne.

Pravilo br. 11

Poništavanje metoda razlikuje se od preopterećenja metode jer je to proces ruimime polimorfizma, dok je preopterećenje i metoda primjer polimorfizma koji se zbiva u vremenu. Kod prevladavanja metode obvezno je isti potpis zadržati. kad izvršimo bilo kakvu promjenu u vrsti povratka metode ili popisu parametara, tada prevoditelj to tretira kao preopterećenje metode.

Nadvladavanje metoda Metoda Preopterećenje
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);
)
)

Izlaz:

Kada koristiti preglasavanje metoda?

Slijede metode upotrebe prevladavanja:

  • OOP-ovi pružaju predivno svojstvo nasljeđivanja kako bi se formirala velika hijerarhija između pretklasa i podrazreda, od manje specijalizacije do veće specijalizacije.
  • Možemo li pomoću nadklase pružiti okvir koji se može naslijediti u svim njegovim podrazredima, a podklasama možemo definirati različito funkcioniranje tih metoda. To se postiže važnim obilježjem, gdje se naslijeđenim metodama u podklasama može pružiti specijalizirano funkcioniranje.
  • Također pomaže u pružanju okvira za više klasa pružanjem zbirke varijabli i metoda koje je potrebno implementirati u svim svojim podrazredima.

Zaključak

OOP-ovi, koncepti čine kôd robusnim i jednostavnim za ponovnu upotrebu kada se učinkovito koriste. Prevladavajuća značajka povećava upotrebu nasljeđivanja za pružanje specifične implementacije generičkoj metodi nadređene class.in njenim podrazredima. Ovo koristi koncept polimorfizma runtime za pokretanje ispravne definicije metode. Otprema dinamičke metode vrši se samo tijekom izvođenja koja provjerava referencu klase koju objekt drži da bi pozvao metodu. Ova se značajka vodi kroz različita pravila i ne odnosi se na statičke metode. Možemo implementirati presvlačenje metoda na bilo koji objektno orijentirani jezik i učiniti naš program bržim i robusnijim.

Preporučeni članci

Ovo je vodič za prevladavanje OOP-ova. Ovdje smo raspravljali o važnosti prevladavanja u OOP-ima, kada ga koristiti i 11 pravila s kodovima i izlazima. Možete i proći kroz naše druge povezane članke da biste saznali više -

  1. Prevladavanje u PHP-u
  2. Poništavanje JavaScript-a
  3. Što je OOP?
  4. Poništavanje metode u C #
  5. Primjeri prevladavanja na Javi
  6. Statička metoda JavaScript | Kako raditi s primjerima

Kategorija: