Sissejuhatus OOP-de ülimusest

Pärilikkuse kontseptsiooni rakendamisel oops kasutavad kõik põhiklassi funktsioonid kõiki sellest tuletatud klasse. Kuid juhul, kui üks tuletatud klass soovib vanemklassis deklareeritud funktsiooni spetsiifilist rakendamist, kuid kasutades sama nime, sama allkirja ja sama tagasivõtutüüpi, kasutatakse ülekaalu funktsiooni. Ületamine võimaldab lasteklassil uuesti määratleda selle funktsiooni, mis on juba määratletud tema vanemklassis või ülemklassis. Sel viisil saab mõlemat määratlust kasutada, täpsustades meetodi kutsumisel klassi objekti. Näiteks laske mõnel vanem- ja lasteklassil olla summafunktsioon ja kui funktsioonile helistada, kasutame lasteklassi objekti, siis kutsutakse lasteklassis olev meetod ja kui kasutate vanemklassi objekti, siis kasutatakse meetodit vanemklassis kutsutakse. väidetavalt alistab see lasteklassi meetod selle ülemklassides kasutatava meetodi.

Meetodi ülimuslikkus

Järgnevad on ülevõtmise meetodid:

  • Runtime polymorphism method alistamine aitab saavutada runtime polymorphism objektorienteeritud programmeerimiskeeltes nagu c ++, java, c # jne.
  • Polümorfism tähendab paljude vormide olemasolu, st ühte allkirja ja mitut määratlust. objektorienteeritud keeltes, kui nii tuletatud kui ka vanemklassil on funktsiooni nimi ja allkiri, siis otsustab kompilaatori ühekordne määratlus, et see peaks kutsuma. Runtime polymorphism tähendab meetodi definitsiooni sidumist kutsutud meetodiga, mis toimub programmi käitusel. See võimaldab rakendada polümorfismi “ühe allkirjaga mitme määratlusega” aspekti. See funktsioon kasutab dünaamilist meetodi saatmist, millel on võimas objektorienteeritud disaini kontseptsioon, et tuua kood korduskasutusse ja robustsusse. Meetodi alistamine võimaldab meil kutsuda meetodi ükskõik millisesse selle tuletatud klassi, teadmata tuletatud klassi objekti tüüpi.
  • Seda funktsiooni kasutades saab rakendada spetsiaalse definitsiooni geneerilisele funktsioonile, mis on päritud selle superklassist.

Kuidas ülekaalustamine OOPides töötab?

Allpool toodud selgitus ütleb, et kuidas ülimuslik töötab:

  • OOP-d, aidake meil rakendada käitusaegset polümorfismi, pärides samal ajal klassi tunnused teiseks. Vaatleme OOP-des ületamise toimimist. Hiljem oletame, et meil on superklassi loom, kellel on kaks funktsiooni - rääkida ja süüa. On kaks alamklassi kass ja koer, kes laiendavad superklassi nime looma.
  • Need kaks alaklassi kasutavad samu funktsioone, mis räägivad ja söövad, kuid muudavad juurutamist, hoides samas meetodite allkirja. Kui nimetate neid funktsioone valides võrdlusmuutujaks, siis meie põhimeetodi korral otsustatakse ainult töö ajal, millist funktsiooni ta peab kutsuma. Näiteks kui objekt hoiab erinevat lasteklassi, mis on kass või koer, siis kutsutakse vastava klassi funktsiooni vastasel juhul, kui objekt omab vanemklassi viidet, siis kutsutakse loomaklassi funktsioon.
  • Siinkohal peaksime nägema, et funktsiooni kutsumine ei sõltu referentsmuutuja tüübist. Selle otsustab kompilaator ainult käituse ajal. See aitab käivitada käitusaja polümorfismi. Samuti aitab see rakendada vanemklassis meetodi üldise määratluse meetodi spetsialiseeritud määratlust.

Kood:

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

Väljund:

Märkus. Lapsetüübi referentsmuutujat ei saa kasutada vanemtüübi viite hoidmiseks.

Meetodi alistamise reeglid

Järgnevad on ülimuslikud reeglid:

Reegel nr 1

Vanemklassi funktsioonis deklareeritud parameetrite loend peaks ühtima parameetrite loendiga, mida on nimetatud lasteklassi ülimusliku meetodi määratluses.

Näiteks:

Meetod vanemklassis

public int test1(int a);

Lapseklassis kasutatav meetod - avalik stringi test1 (); // meetodi alistamist siin ei toetata, kuna tagastamise tüüp ja argumendid on erinevad, kuid kompileerimise aja viga ei tule. Seda meetodit käsitletakse lasteklassi uue meetodina.

Reegel nr 2

Lasteklassis kasutatava meetodi tagastamise tüüp peab olema sama või selle alamtüüp, mis ületatakse.

Näiteks:

Meetod vanemklassis

public Object test1(int a);

Meetod lasteklassis

public String test1();

Vale

Meetod vanemklassis

public String test1(int a);

Meetod lasteklassis

public Object test1();

Reegel nr 3

Vanemklassi meetodis sisalduv juurdepääsu spetsifikaator peab olema võrdselt piirav või piiravam kui meetod, mis alistab seda lasteklassis.

Vale

Meetod vanemklassis

public int test1(int a);

Meetod lasteklassis

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

Reegel nr 4

Ainult eksemplarimeetod, mille juurdepääsunäitaja on avalikult kaitstud või vaikimisi, saab tühistada. Selle põhjuseks on asjaolu, et ainult selle esinemisjuhu meetodi saab selle alaklassi järgi pärida ja seega öelda, et see on üle kirjutatud. Kui vanemklassis määratletud eksemplari meetod on avalikku meetodit piiravam, siis seda alamklassis ei pärita ja kui keegi määratleb sama meetodit alaklassis, ei võeta seda stsenaariumi ülekaalukaks meetodiks, kuna avalikud meetodid ei saa päritakse, seda ei saa tühistada.

Näiteks:

Meetod vanemklassis

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

Meetod lasteklassis

private int test1();

Vale

Meetod vanemklassis

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

Meetod lasteklassis

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

Seda peetakse lasteklassi uueks privaatseks meetodiks

Reegel nr 5

Super märksõna abil saab kutsuda vanema klassi funktsiooni, mille alamklass on ületanud.

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

Väljund:

Reegel nr 6

Klassi konstruktorit ei saa alamklassidega alistada, kuna kahe klassi konstruktor ei saa olla sama.

Reegel nr 7

Erandkäsitsemine ülimuslikkuse osas.

  • Vanemaklassi sisestusmeetodi puhul ei tehta ühtegi erandit, siis lubatakse alaklassis esineval ülimuslikul meetodil kasutada ainult kontrollimata erandit. Kui ülimuslik meetod näitab märgitud erandit, näitab kompilaator viga.
  • Kui vanemate klassis ületatud meetod loobub alaklassis esineva erandliku tandemi ülimuslikust meetodist, peab erandite hierarhias sisaldama sama taseme või selle alamtüübi erandit või erandit pole üldse.

Reegel nr 8

Võimalik on ka mitmeastmelise pärimise puhul ülimuslik meetod.

Kood:

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

Väljund:

Reegel nr 9

Meetodi ülimuslikud reeglid Java-s

  • Sünkroonitud meetodi saab sünkroonimata meetodi abil hõlpsalt mööda vaadata ja vastupidi.
  • Abstraktsetes klassides või liidestes esinev abstraktne meetod on mõeldud ülekirjutamiseks, et tagada deklareeritud meetoditele konkreetne rakendamine, vastasel korral näitab see kompileerimise aja viga.
  • Emaklassis esineva staatilise meetodiga sama nimega staatilise meetodi määratlemist nimetatakse meetodi varjamiseks, mitte meetodi alistamiseks, kuna see ei rakenda käitusaja polümorfismi.
  • Lõplikke meetodeid ei saa mööda vaadata.

Reegel nr 10

Meetod on ülimuslik C ++ korral

C plussis ületav meetod saavutatakse meetodi virtuaalseks kuulutamisega. C ++ käitusaegse polümorfismi saavutamiseks kasutatakse virtuaalset märksõna. Kui Jaavas võetakse vaikimisi kõiki funktsioone virtuaalseteks.

Reegel nr 11

Meetodi alistamine erineb meetodi ülekoormamisest, kuna see on käitusaegne polümorfism, samas kui ülekoormamine ja meetod on näide kompileerimisaja polümorfismist. Meetodi alistamisel on kohustuslik hoida meetodi allkiri sama. kui teeme meetodi tagastamise tüübis või parameetrite loendis muudatusi, siis töötleja käsitleb seda meetodi ülekoormamisena.

Meetod ülimuslik Meetodi ülekoormamine
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);
)
)

Väljund:

Millal kasutada meetodit ülimuslikuks?

Allpool on toodud ülekaalu kasutamise meetodid.

  • OOP-id pakuvad päranduse imelist tunnust, moodustades superklassi ja alaklassi vahel suurepärase hierarhia, alates madalamast spetsialiseerumisest kuni suurema spetsialiseerumiseni.
  • Kas me saame superklassi abil luua raamistiku, mille saab pärandada kõigis selle alaklassides, ja alaklassides, mille abil saame määratleda nende meetodite erinevat toimimist? See saavutatakse ülimuslikkuse abil, mille korral saab päritud meetodite alamklassidele pakkuda spetsialiseeritud toimimist.
  • Samuti aitab see luua raamistiku mitmele klassile, pakkudes muutujate kogu ja meetodit, mida tuleb rakendada kõigis selle alamklassides.

Järeldus

OOP-ide kontseptsioonid muudavad koodi tõhusa kasutamise korral robustseks ja hõlpsaks taaskasutamiseks. Ülekaalukas omadus täiustab pärandi kasutamist, et pakkuda alamklassides põhiklassi üldmeetodi konkreetset rakendust. See kasutab käitusaegse polümorfismi kontseptsiooni meetodi õige määratlemise käivitamiseks. Dünaamiline meetodi saatmine toimub ainult töö ajal, mis kontrollib selle klassi viidet, mida objekt hoiab meetodi kutsumiseks. Seda funktsiooni juhitakse erinevate reeglite kaudu ja see ei kehti staatiliste meetodite puhul. Saame rakendada meetodi ülimuslikkust mis tahes objektorienteeritud keeles ja muuta meie programm kiiremaks ja töökindlamaks.

Soovitatavad artiklid

See on OOP-de alistamine. Siin räägime sellest, kuidas ületamine OOP-des töötab, millal seda kasutada, ning 11 reeglit koos koodide ja väljundiga. Lisateavet leiate ka meie muudest seotud artiklitest -

  1. Ülekaalus PHP-s
  2. Esmatähtis JavaScriptis
  3. Mis on OOP?
  4. Meetodi ülimuslik C #
  5. Ülevaatuse näited Java-s
  6. JavaScripti staatiline meetod | Kuidas töötada näidetega

Kategooria: