Uvod o prevladovanju v OOP

Med izvajanjem koncepta dedovanja v oopsi vse funkcije v nadrejenem razredu uporabljajo vsi njegovi izpeljani razredi. Če pa en izpeljani razred želi specifično izvajanje funkcije, ki je bila deklarirana v nadrejenem razredu, vendar uporablja isto ime, isti podpis in isto vrnilno vrsto, se uporabi prevladujoča funkcija. Preglasitev omogoča otroškemu razredu, da na novo definira funkcijo, ki je bila že določena v njenem nadrejenem razredu ali nadrazredu. Na ta način lahko uporabimo obe definiciji, če določimo predmet razreda, medtem ko pokličemo metodo. Na primer, pustimo, da obstaja funkcija vsote tako v nadrejenem kot otroškem razredu in med klicanjem funkcije uporabljamo objekt otroškega razreda, potem bo poklicana metoda, prisotna v otroškem razredu, in namesto tega, če uporabljate objekt nadrejeni razred, potem je metoda prisotna v matičnem razredu bodo poklicani. ta metoda v otroškem razredu naj bi preglasila metodo, ki je prisotna v njenih superrazredih.

Potreba po prevladovanju metod

Sledijo metode prevladovanja:

  • Prevladujoča metoda polimorfizma izvajanja pomaga doseči polimorfizem izvajanja v objektno usmerjenih programskih jezikih, kot so c ++, java, c # itd.
  • Polimorfizem pomeni imeti veliko oblik, tj. En podpis in več definicij. v objektno usmerjenih jezikih, kadar imata tako izpeljani kot nadrejeni razred isto ime in podpis funkcije, potem ob prevajalniku enkratno razreši definicijo, ali jo je treba poklicati. Polimorfizem izvajanja pomeni vezavo definicije metode na metodo, ki se imenuje, ki se pojavi med izvajanjem programa. Omogoča izvajanje vidika polimorfizma z eno samo podpisovanjem več definicij. Ta funkcija uporablja dinamično odpremljanje metod, ki ima močan koncept objektno usmerjenega oblikovanja, da prinese ponovno uporabo kode in robustnost. Prevladovanje metode nam omogoča klic metode v katerega koli izpeljanih razredov, ne da bi vedeli vrsto predmeta izpeljanega razreda.
  • S to funkcijo je mogoče uporabiti specializirano definicijo za generično funkcijo, ki je bila podedovana od njenega nadstandarda.

Kako prevladovanje deluje v OOP-jih?

Spodnja razlaga pravi, kako prevladujoče delovanje deluje:

  • OOP-ji, pomagajte nam izvajati polimorfizem izvajanja, medtem ko lastnosti razreda podedujemo v drugega. Oglejmo si delovanje prevladujočih v OOP-jih. Pozneje predpostavimo, da imamo živali z nadklapljami, ki imajo dve funkciji, da govorijo in jedo. Obstajata dva podrazreda mačka in pes, ki razširjata ime nadvlade živali.
  • Ta dva podrazreda uporabljata iste funkcije govorijo in jedo, vendar spremenijo izvajanje, vendar ohranijo enak podpis metod. Zdaj je v naši glavni metodi, če pokličete te funkcije z izbiro referenčne spremenljivke, potem se bo med izvajanjem le odločilo, katero funkcijo mora poklicati. Na primer, če ima objekt razliko otroškega razreda, ki je mačka ali pes, potem se funkcija ustreznega razreda imenuje drugače, če ima objekt referenco nadrejenega razreda, potem bo poklicana funkcija razreda živali.
  • Tu bi morali videti, da funkcija, ki se imenuje, ni odvisna od vrste referenčne spremenljivke. To določi prevajalnik v času izvajanja, saj le ta pomaga izvajati polimorfizem izvajanja. Pomaga tudi pri izvajanju specializirane definicije metode splošne definicije metode v nadrejenem razredu.

Koda:

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

Izhod:

Opomba: Referenčne spremenljivke otroškega tipa ni mogoče uporabiti za sklicevanje na nadrejeni tip.

Pravila za preglasitev metode

Sledijo pravila za preglasitev:

1. pravilo

Seznam parametrov, deklariranih v funkciji nadrejenega razreda, bi se moral ujemati s seznamom parametrov, omenjenih v definiciji prevladujoče metode v otroškem razredu.

Primer:

Metoda v matičnem razredu

public int test1(int a);

Metoda v nadrejenem razredu - javni niz test1 (); // tu ne bo podprta, saj se vrsta vrnitve in argumenti razlikujejo, vendar ne bo prišlo do napake v času prevajanja. Ta metoda bo obravnavana kot nova metoda otroškega razreda.

2. pravilo

Vrnitvena metoda metode, ki je prisotna v otroškem razredu, mora biti enaka ali podvrsta povratne vrste metode, ki jo preglasijo.

Primer:

Metoda v razredu staršev

public Object test1(int a);

Metoda v otroškem razredu

public String test1();

Nepravilno

Metoda v matičnem razredu

public String test1(int a);

Metoda v otroškem razredu

public Object test1();

3. pravilo

Specifik dostopa, ki je prisoten v metodi nadrejenega razreda, mora biti enako restriktiven ali bolj restriktiven kot metoda, ki ga preglasi nadrejeni razred.

Nepravilno

Metoda v matičnem razredu

public int test1(int a);

Metoda v otroškem razredu

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

Pravilo št. 4

Prepovedo se lahko samo metoda primerka s specifikacijami dostopa kot javno zaščiten ali privzet. To je zato, ker lahko le ta metoda primera podeduje po podrazredu in tako reče, da je preglasan. V primeru, da je metoda primerka, ki je navedena v nadrejenem razredu, bolj restriktivna, javna metoda, potem ne bo podedovana v njenem podrazredu, in če kdo definira isto metodo v podrazredu, se scenarij ne jemlje kot metoda, ki prevlada, ker javne metode ne morejo Če je podedovano, tega ni mogoče odpraviti.

Primer:

Metoda v matičnem razredu

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

Metoda v otroškem razredu

private int test1();

Nepravilno

Metoda v matičnem razredu

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

Metoda v otroškem razredu

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

Šteje se za novo zasebno metodo otroškega razreda

Pravilo 5

Super ključna beseda se lahko uporablja za klicanje funkcije nadrejenega razreda, ki jo je preglasil njegov podrazred.

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

Izhod:

Pravilo 6

Konstruktorja razreda ne morejo preglasiti njegovi podklasi, saj konstruktor dveh razredov ne more biti enak.

Pravilo 7

Ravnanje izjem pri prevladovanju.

  • Incase metoda v nadrejenem razredu ne vrže nobene izjeme, potem lahko prevladujoča metoda, prisotna v podrazredu, vrže samo nenadzorovano izjemo. V primeru, da metoda preglasitve pokaže preverjeno izjemo, bo prevajalnik pokazal napako.
  • Če metoda v nadrejenem razredu, ki je razveljavljen, vrže metodo nadomeščanja tandemov izjem, ki je prisoten v podrazredu, z izjemo iste stopnje ali njegovega podtipa v hierarhiji izjem ali sploh ne.

8. pravilo

Možno je tudi prevladovanje metode pri večstopenjskem dedovanju.

Koda:

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

Izhod:

Pravilo 9

Pravila o prevladujočem načinu v Javi

  • Sinhronizirano metodo lahko enostavno premagamo z nesinhronizirano metodo in obratno.
  • Abstraktna metoda, prisotna v abstraktnih razredih ali vmesnikih, naj bi bila prepisana, da bi zagotovila specifično izvedbo deklariranim metodam, sicer bo prikazana napaka med sestavljanjem.
  • Opredelitev statične metode z istim imenom kot statična metoda, prisotna v nadrejenem razredu, je znana kot metoda, ki ne skriva preglasitve metode, saj ne izvaja polimorfizma izvajanja.
  • Končnih metod ni mogoče razveljaviti.

Pravilo št. 10

Nadomestitev metode v C ++

Prevladovanje metode v c plus dosežemo z razglasitvijo metode kot navidezne. Navidezna ključna beseda se uporablja za doseganje polimorfizma izvajanja v c ++. Na Javi so vse funkcije privzeto sprejete kot navidezne.

11. pravilo

Prekoračitev metode se razlikuje od preobremenitve metode, saj gre za proces trajajočega polimorfizma, medtem ko je preobremenitev in metoda primer polimorfizma v prevajalnem času. Pri preglasitvi metode je obvezno ohraniti enak podpis metode. ko spremenimo vrsto vrnitve metode ali seznam parametrov, potem prevajalnik to obravnava kot preobremenitev metode.

Prevlada metoda Metoda Preobremenitev
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);
)
)

Izhod:

Kdaj uporabiti preglasitev metode?

Sledijo načini uporabe prevladovanja:

  • OOP zagotavlja čudovito lastnost dedovanja, saj tvori veliko hierarhijo med nadklasi in podrazredom, od manjše specializacije do večje specializacije.
  • Ali lahko z nadklaso uporabimo okvir, ki ga je mogoče podedovati v vseh njegovih podrazredih, in podklasi lahko določimo različno delovanje teh metod. To dosežemo s prevladujočo funkcijo, kjer je mogoče podedovanim metodam zagotoviti podedovane metode v podrazredih.
  • Prav tako pomaga zagotoviti okvir za več razredov z zagotavljanjem zbirke spremenljivk in metode, ki jo je treba uporabiti v vseh njenih podrazredih.

Zaključek

OOP-ji, koncepti omogočajo kodo robustno in enostavno, ko se učinkovito uporabljajo. Prevladujoča funkcija povečuje uporabo dedovanja za zagotavljanje specifične izvedbe generični metodi nadrejenega class.in njenih podrazredov. To uporablja koncept izvajanja polimorfizma, da sproži pravilno opredelitev metode. Odpošiljanje dinamične metode se izvede samo med izvajanjem, ki preverja referenco razreda, ki ga ima objekt, da pokliče metodo. To funkcijo vodijo različna pravila in ne velja za statične metode. Preveličanje metod lahko izvedemo v katerem koli predmetno usmerjenem jeziku in naredimo naš program hitrejši in robustnejši.

Priporočeni članki

To je vodnik za Prevladovanje v OOP. Tukaj razpravljamo, kako prevladujoče deluje v OOP-jih, kdaj ga uporabljati, in 11 pravil s kodami in izhodom. Obiščite lahko tudi druge naše sorodne članke, če želite izvedeti več -

  1. Prevladujoče v PHP
  2. Prevlado v JavaScript
  3. Kaj je OOP?
  4. Prevladovanje metode v C #
  5. Primeri preglasitve v Javi
  6. Statična metoda JavaScript | Kako delati s primeri