Johdanto OOP: n ohittamisesta

Toteuttaessaan perintökonseptia oho-osassa, kaikki sen johdetut luokat käyttävät vanhemman luokan toimintoja. Mutta jos yksi johdettu luokka haluaa vanhemmassa luokassa ilmoitetun toiminnon spesifisen toteutuksen, mutta käyttäen samaa nimeä, samaa allekirjoitusta ja samaa palautustyyppiä, käytetään silloin ensisijaista ominaisuutta. Ohittaminen antaa lapsille luokan määritellä uudelleen tehtävä, joka on jo määritelty vanhemman luokassaan tai yliluokkaan. Tällä tavoin voidaan käyttää molempia määritelmiä määrittelemällä luokan kohde samalla kun menetelmää kutsutaan. Olkoon esimerkiksi summafunktio sekä vanhemmissa että lasten luokassa ja kutsuttaessamme funktiota käytämme lasten luokan objektia, kutsutaan lasten luokassa olevaa menetelmää, ja jos käytät vanhemmuusluokan objektia, silloin läsnä oleva menetelmä vanhemmassa luokassa kutsutaan. Tämän lasten luokassa käytetyn menetelmän sanotaan ohittavan superslassissaan esiintyvä menetelmä.

Menetelmän ohittamisen tarve

Seuraavat menetelmät ohittavat:

  • Ajonaikaisen polymorfismin menetelmän ohittaminen auttaa saavuttamaan ajonaikaisen polymorfismin olio-ohjelmointikielissä, kuten c ++, Java, c # jne.
  • Polymorfismi tarkoittaa monien muotojen omaamista, ts. Yksi allekirjoitus ja useita määritelmiä. olio-suuntaisilla kielillä, kun sekä johdetulla että vanhemmalla luokalla on sama funktion nimi ja allekirjoitus, silloin kun kerääjä ratkaisee määrittelyn, se tarvitsee kutsua. Ajonaikainen polymorfismi tarkoittaa metodimääritelmän sitoutumista kutsuttuun menetelmään, joka tapahtuu ohjelman ajon aikana. Se mahdollistaa polymorfismin "yhden allekirjoituksen monimääritys" -kohdan toteuttamisen. Tämä ominaisuus käyttää dynaamista menetelmän lähettämistä, jolla on tehokas oliokeskeisen suunnittelun käsite tuomaan koodin uudelleenkäytön ja tukevuuden. Menetelmän ohittaminen antaa meille mahdollisuuden kutsua menetelmä mihin tahansa johdettuihin luokkiin tietämättä johdetun luokan objektityyppiä.
  • Tätä ominaisuutta käyttämällä voidaan toteuttaa erikoistunut määritelmä geneeriselle toiminnolle, joka on peritty superluokastaan.

Kuinka ohittaminen toimii OOP: issa?

Seuraava selitys kertoo, kuinka ohittaminen toimii:

  • OOP, auta meitä toteuttamaan ajonaikainen polymorfismi perimällä luokan piirteet toiseen. Katsotaanpa ohittamisen toimintaa OOP: issa. Oletetaan myöhemmin, että meillä on superluokan nimi eläin, jolla on kaksi toimintoa puhua ja syödä. On olemassa kaksi alaluokkaa kissa ja koira, joka laajentaa superluokan nimeä eläin.
  • Nämä kaksi alaluokkaa käyttävät samoja toimintoja puhuvat ja syövät, mutta muuttavat toteutusta, mutta pitävät menetelmien allekirjoitukset samoina. Nyt päämenetelmässämme, jos kutsut näitä funktioita valitsemalla referenssimuuttuja, niin vain suorituksen aikana päätetään, mihin funktioon se tarvitsee kutsua. Esimerkiksi, jos esineellä on lasten luokan ero, joka on kissa tai koira, kutsutaan vastaavan luokan funktiota muutoin, jos esineellä on viittaus vanhemmaluokkaan, kutsutaan eläinluokan funktiota.
  • Tässä pitäisi nähdä, että funktiota kutsutaan, ei riipu referenssimuuttujan tyypistä. Kääntäjä päättää tämän vain suorituksen aikana. Se auttaa suorittamaan ajonaikaisen polymorfismin. Se auttaa myös toteuttamaan menetelmän erikoismääritelmän menetelmän yleisen määritelmän määrittämiseksi vanhemmaluokassa.

Koodi:

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

lähtö:

Huomaa: Lapsityyppistä vertailumuuttujaa ei voida käyttää pitämään viittausta vanhemmatyyppiin.

Menetelmän ohittamista koskevat säännöt

Seuraavat ovat ohittamista koskevat säännöt:

Sääntö # 1

Vanhemmaluokan funktiossa ilmoitetun parametriluettelon on vastattava lastenluokan ensisijaisen menetelmän määritelmässä mainittujen parametrien luetteloa.

Esimerkiksi:

Menetelmä vanhemmaluokassa

public int test1(int a);

Lastenluokan menetelmä - julkinen merkkijärjestelmä1 (); // menetelmän korvaamista ei tueta tässä, koska paluutapa ja argumentit ovat erilaisia, mutta käännösaikavirhettä ei tule. Tätä menetelmää pidetään uudena lastenluokan menetelmänä.

Sääntö 2

Lapsiluokassa läsnä olevan menetelmän paluutyypin on oltava sama tai alityyppi ohitetun menetelmän paluutyypistä.

Esimerkiksi:

Menetelmä vanhemmaluokassa

public Object test1(int a);

Lastenluokan menetelmä

public String test1();

väärä

Menetelmä vanhemmaluokassa

public String test1(int a);

Lastenluokan menetelmä

public Object test1();

Sääntö # 3

Vanhemmuusluokan menetelmässä läsnä olevan käyttöoikeusspesifikaattorin on oltava yhtä rajoittava tai rajoittavampi kuin menetelmä, joka ohittaa sen lasten luokassa.

väärä

Menetelmä vanhemmaluokassa

public int test1(int a);

Menetelmä lapsiluokassa

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

Sääntö 4

Vain instanssimenetelmä, jolla pääsymääritys on julkisesti suojattu tai oletus, voidaan ohittaa. Tämä johtuu siitä, että vain tämä esiintymomenetelmä voi periä sen alaluokan perusteella ja sanotaan siten ohitettua. Jos pääluokassa määritetty esiintomenetelmä on rajoittavampi esimerkki julkisesta menetelmästä, sitä ei peritä alaluokassaan, ja jos joku määrittelee saman menetelmän alaluokassa, tätä skenaariota ei pidetä ohittavana menetelmänä, koska julkiset menetelmät eivät voi perinyt tätä ei voida ohittaa.

Esimerkiksi:

Menetelmä vanhemmaluokassa

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

Lastenluokan menetelmä

private int test1();

väärä

Menetelmä vanhemmaluokassa

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

Lastenluokan menetelmä

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

Sitä pidetään lapsiluokan uudena yksityisenä menetelmänä

Sääntö 5

Super-avainsanaa voidaan käyttää kutsuttamaan vanhemman luokan funktiota, jonka alaluokka on ohittanut.

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

lähtö:

Sääntö # 6

Alaluokkaan ei voida ohittaa luokan rakentajaa, koska kahden luokan rakentaja ei voi olla sama.

Sääntö # 7

Poikkeuksellinen käsittely ohittamisessa.

  • Yläluokan incase-menetelmä ei heitä mitään poikkeusta, silloin alaluokassa esiintyvä ylennysmenetelmä saa heittää vain tarkistamattoman poikkeuksen. Jos ohitusmenetelmä näyttää valitun poikkeuksen, kääntäjä näyttää virheen.
  • Jos ohittavan pääluokan menetelmä ohittaa alaluokassa esiintyvän poikkeuksellisen tandem-ohitusmenetelmän, poikkeuksen hierarkiassa on oltava saman tason tai sen alatyypin poikkeus tai ei ollenkaan.

Sääntö # 8

Menetelmän ohittaminen monitasoisella perinnöllä on myös mahdollista.

Koodi:

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

lähtö:

Sääntö # 9

Ohittavat Java-menetelmän säännöt

  • Synkronoitu menetelmä voidaan helposti ohittaa synkronoimattomalla menetelmällä ja päinvastoin.
  • Abstraktissa luokissa tai rajapinnoissa esiintyvä tiivistelmämenetelmä on tarkoitus korvata antamalla ilmoitetulle menetelmälle erityinen toteutus, muuten se näyttää käännösajan virheen.
  • Staattisen menetelmän määritteleminen samalla nimellä kuin staattisella menetelmällä, joka on läsnä vanhemmassa luokassa, tunnetaan nimellä menetelmä piilottaminen ei menetelmän ohittaminen, koska se ei toteuta ajonaikaista polymorfismia.
  • Lopullisia menetelmiä ei voida ohittaa.

Sääntö # 10

Menetelmä ohittaa C ++: ssa

C plus -menetelmän ohittaminen saavutetaan julistamalla menetelmä virtuaaliseksi. Virtuaalista avainsanaa käytetään saavuttamaan ajonaikainen polymorfismi c ++: ssa. Java-alueella kaikki toiminnot otetaan oletuksena virtuaalisiksi.

Sääntö # 11

Menetelmän ohittaminen eroaa menetelmän ylikuormituksesta, koska se on ajonaikaisen polymorfismin prosessi, kun taas ylikuormitus ja menetelmä ovat esimerkki käännösajan polymorfismista. Menetelmän ohittamisessa on pakollista pitää menetelmän allekirjoitus samana. kun teemme muutoksia menetelmän palautustyyppiin tai parametriluetteloon, kääntäjä käsittelee sitä menetelmän ylikuormituksena.

Menetelmän ohittaminen Menetelmä ylikuormitus
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);
)
)

lähtö:

Milloin menetelmän ohittamista käytetään?

Seuraavassa on menetelmät ohituksen käyttämiseksi:

  • OOP: t tarjoavat upean ominaisuuden perinnölle muodostaa suuren hierarkian superluokan ja alaluokan välillä pienemmästä erikoistumisesta suurempaan erikoistumiseen.
  • Voimmeko superluokan avulla luoda kehyksen, joka voidaan periä kaikissa sen alaluokissa, ja alaluokissa, jotka voimme määritellä näiden menetelmien erilaisesta toiminnasta. Tämä saavutetaan ohittamalla ominaisuus, jossa erikoistetut toiminnot voidaan tarjota perinnöllisille menetelmien alo-alaluokille.
  • Se auttaa myös tarjoamaan puitteet useille luokille tarjoamalla muuttujien kokoelman ja menetelmän, joka on toteutettava kaikissa alaluokissa.

johtopäätös

OOP: t, käsitteet tekevät koodista vankan ja helpon käyttää uudelleen, kun niitä käytetään tehokkaasti. Ohittava ominaisuus parantaa perintön käyttöä tarjoamaan erityinen toteutus vanhemmaluokan alaluokkien geneeriselle menetelmälle. Tämä käyttää suorituksenaikaista polymorfismi-konseptia menetelmän oikean määritelmän laukaisemiseksi. Dynaaminen menetelmän lähetys suoritetaan vain ajonaikaisesti, joka tarkistaa sen luokan viitteen, jota objekti pitää metodin kutsumiseksi. Tämä ominaisuus ohjaa erilaisia ​​sääntöjä, eikä sitä sovelleta staattisiin menetelmiin. Pystymme toteuttamaan menetelmän ohittamisen millä tahansa objektiorientoidulla kielellä ja tekemään ohjelmasta nopeamman ja vankemman.

Suositellut artikkelit

Tämä on opas OOP: n ohittamiseen. Tässä keskustellaan siitä, kuinka ohittaminen toimii OOP: issa, milloin sitä käytetään, ja 11 sääntöjä koodeilla ja tuotoksilla. Voit myös käydä läpi muiden aiheeseen liittyvien artikkeleidemme saadaksesi lisätietoja-

  1. Ohittaminen PHP: ssä
  2. Ohittaminen JavaScriptissä
  3. Mikä on OOP?
  4. Menetelmän ohittaminen C #: ssä
  5. Esimerkkejä Java-järjestelmän ohittamisesta
  6. JavaScript-staattinen menetelmä | Kuinka työskennellä esimerkkien kanssa