Introduksjon om overstyring i OOP

Når du implementerer arvekonseptet i oops, brukes alle funksjonene i foreldreklassen av alle dets avledede klasser. Men i tilfelle hvis en avledet klasse vil ha den spesifikke implementeringen av funksjonen som er blitt erklært i foreldreklasse, men bruker samme navn, samme signatur og samme returtype, blir overstyrende funksjon brukt. Overriding lar barneklassen omdefinere funksjonen som allerede er definert i foreldreklassen eller superklassen. På denne måten kan man bruke begge definisjonene ved å spesifisere objektets klasse mens man kaller metoden. For eksempel, la det være en sumfunksjon i både foreldre- og barneklasse, og mens du kaller funksjonen bruker vi objektet til barneklasse, så kalles metoden som er til stede i barneklassen, og i stedet hvis du bruker foreldreklasseobjekt så vil metoden til stede i foreldreklassen vil bli kalt. denne metoden i barneklassen sies å overstyre metoden som er til stede i superklasser.

Behov for metodeoverskridelse

Følgende er metodene for å overstyre:

  • Runtime polymorphism method overstyring bidrar til å oppnå runtime polymorfisme i objektorienterte programmeringsspråk som c ++, java, c #, etc.
  • Polymorfisme betyr å ha mange former, dvs. en signatur og flere definisjoner. i objektorienterte språk når både avledet og overordnet klasse har samme navn og signatur på en funksjon, løser kompilatoren på en gang definisjonen trenger den å ringe. Runtime polymorfisme betyr binding av en metodedefinisjon til en metode som kalles forekommer ved drift av et program. Det gjør det mulig å implementere "en signatur multidefinisjon" aspekt av polymorfisme. Denne funksjonen bruker dynamisk metodeforsendelse som har et kraftig konsept med objektorientert design for å bringe gjenbruk av kode og robusthet. Å overstyre en metode lar oss en metodeanrop til noen av dens avledede klasser uten å kjenne til hvilken type objekt den avledede klassen har.
  • Ved å bruke denne funksjonen kan man implementere spesialisert definisjon til generisk funksjon som er arvet fra superklassen.

Hvordan virker overstyring i OOP-er?

Nedenfor forklares det hvordan overordnede fungerer:

  • OOP-er, hjelper oss å implementere runtime polymorfisme mens vi arver en klassefunksjon til en annen. La oss se på arbeidet med å overstyre i OOP. Anta senere at vi har et superklasse-navnedyr som har to funksjoner som snakker og spiser. Det er to underklasser katt og hund som utvider navnet på superklassen.
  • Disse to underklassene bruker de samme funksjonene som snakker og spiser, men endrer implementeringen, men holder signaturen til metodene den samme. I hovedmetoden vår, hvis du kaller disse funksjonene for å velge referansevariabelen, vil det bare ved kjøretid avgjøres hvilken funksjon den trenger å ringe. For eksempel, hvis objektet har forskjellen mellom barneklasse som er katt eller hund, vil funksjonen til en respektive klasse bli kalt ellers hvis objektet har referansen til foreldreklassen, vil funksjonen til en dyreklasse bli kalt.
  • Her skal vi se at funksjonen kalles ikke avhenger av typen referansevariabel. Dette avgjøres av kompilatoren under kjøretid, bare det hjelper å implementere runtime polymorfisme. Det hjelper også til å implementere den spesialiserte definisjonen av metoden for den generiske definisjonen av metoden i foreldreklassen.

Kode:

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

Produksjon:

Merk: En referansevariabel av barnetype kan ikke brukes til å holde en referanse til foreldretypen.

Regler for å overstyre en metode

Følgende er regler for overstyring:

Regel 1

En liste over parametrene som er erklært i funksjonen til foreldreklasse, bør samsvare med listen over parametrene som er nevnt i definisjonen av overordnet metode i barneklasse.

For eksempel:

Metoden i foreldreklassen

public int test1(int a);

En metode i barneklasse - offentlig strengtest1 (); // metodeoverskridelse vil ikke bli støttet her da returtype og argumenter er forskjellige, men det vil ikke komme noen feil i kompileringstid. Denne metoden vil bli betraktet som en ny metode for en barneklasse.

Regel 2

Returtypen til metoden som er til stede i barneklassen, må være den samme eller en undertype av returtypen til metoden som blir tilsidesatt.

For eksempel:

Metoden i en foreldreklasse

public Object test1(int a);

Metoden i barneklassen

public String test1();

stemmer ikke

Metoden i foreldreklassen

public String test1(int a);

Metoden i barneklassen

public Object test1();

Regel 3

Tilgangspesifikatoren som er til stede i metoden for foreldreklassen, må være like begrensende eller mer restriktiv enn metoden som overstyrer den i barneklassen.

stemmer ikke

Metoden i foreldreklassen

public int test1(int a);

Metode i barneklassen

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

Regel 4

Bare forekomstmetoden med tilgangsspesifikator som offentlig beskyttet eller standard kan overstyres. Dette er fordi bare denne forekomstmetoden kan arves av underklassen og dermed sies å bli tilsidesatt. I tilfelle forekomstmetoden som er spesifisert i foreldreklassen er mer restriktiv eksempel på offentlig metode, vil den ikke bli arvet i underklassen og gjør hvis noen definerer den samme metoden i en underklasse, det scenariet ikke blir brukt som en metode overstyrende som offentlige metoder ikke kan bli arvet dette kan ikke overstyres.

For eksempel:

Metoden i foreldreklassen

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

Metoden i barneklassen

private int test1();

stemmer ikke

Metoden i foreldreklassen

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

Metoden i barneklassen

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

Det blir sett på som en ny privat metode for barneklassen

Regel 5

Supernøkkelordet kan brukes til å kalle funksjonen til foreldreklasse som er overstyrt av underklassen.

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

Produksjon:

Regel 6

Konstruktøren av en klasse kan ikke overstyres av underklasser, da en konstruktør av to klasser ikke kan være den samme.

Regel 7

Unntakshåndtering ved overstyring.

  • Incase-metoden i foreldreklassen kaster ikke noe unntak, så den overordnede metoden som er til stede i underklassen har lov til å kaste et eneste ukontrollert unntak. I tilfelle den overordnede metoden viser merket unntak, vil kompilatoren vise en feil.
  • Hvis metoden i den overordnede klassen som blir overstyret, kaster en unntak tandemoverskridende metode som er til stede i underklassen, må gjennom et unntak av samme nivå eller dens undertype i unntakshierarkiet eller ikke noe unntak i det hele tatt.

Regel 8

Overvinning av metoden i flernivåarv er også mulig.

Kode:

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

Produksjon:

Regel 9

Regler for overstyringsmetoder i Java

  • En synkronisert metode kan enkelt overstyres av en ikke-synkronisert metode og omvendt.
  • Abstrakt metode som er til stede i abstrakte klasser eller grensesnitt er ment å bli overskrevet for å gi spesifikk implementering av de deklarerte metodene ellers vil det vise en kompilertidsfeil.
  • Å definere en statisk metode med samme navn som en statisk metode som er tilstede i foreldreklassen, er kjent som metode som skjuler ikke metoden overstyrer, da den ikke implementerer runtime polymorfisme.
  • Endelige metoder kan ikke overstyres.

Regel 10

Metoden overstyrer i C ++

Overvinning av metoden i c pluss oppnås ved å erklære en metode som virtuell. Et virtuelt nøkkelord brukes for å oppnå runtime polymorfism i c ++. Mens i Java alle funksjoner som standard tas som virtuelle.

Regel 11

Overstyring av metoden er forskjellig fra metodens overbelastning, ettersom det er en prosess med runetidspolymorfisme, mens overbelastning og metode er et eksempel på kompileringstid-polymorfisme. Ved metodeoverskridelse er det obligatorisk å holde signaturen til metoden den samme. når vi gjør noen endring i metoden retur type eller parameterliste, behandler kompilatoren det som metode overbelastning.

Metodeoverskridelse Metode Overbelastning
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);
)
)

Produksjon:

Når skal jeg bruke metodeoverskridelse?

Følgende er metodene for å bruke Overriding:

  • OOPs gir et fantastisk trekk ved arv for å danne et flott hierarki mellom superklasse og underklasse er fra mindre spesialisering til større spesialisering.
  • Kan vi bruke superklassen for å gi et rammeverk som kan arves i alle underklassene, og underklassene kan vi definere de forskjellige funksjonene til disse metodene. Dette oppnås ved å overstyre funksjon der spesialisert funksjon kan gis til de arvelige metodene i underklasser.
  • Det hjelper også til å gi et rammeverk for flere klasser ved å tilby en samling variabler og metoden som må implementeres i alle underklasser.

Konklusjon

OOP-er, konsepter gjør kode robuste og enkle å gjenbruke når de brukes effektivt. Den overordnede funksjonen forbedrer bruken av arv for å gi den spesifikke implementeringen til den generiske metoden for foreldreklasse. I underklasser. Dette bruker runtime polymorfism-konseptet for å utløse riktig definisjon av metode. Sending av dynamisk metode gjøres bare under kjøretid som bare kontrollerer referansen til klassen objektet holder for å kalle metoden. Denne funksjonen styres gjennom forskjellige regler og gjelder ikke for statiske metoder. Vi kan implementere metodeoverskridelse på ethvert objektorientert språk og gjøre programmet vårt raskere og robust.

Anbefalte artikler

Dette er en guide til å overstyre i OOP. Her diskuterer vi hvordan overordnede fungerer i OOP, når du skal bruke det, og 11 regler med koder og utdata. Du kan også gå gjennom andre relaterte artikler for å lære mer-

  1. Overstyring i PHP
  2. Overstyrer i JavaScript
  3. Hva er OOP?
  4. Metodeoverskridelse i C #
  5. Eksempler på overstyring i Java
  6. Static metoden for JavaScript | Slik jobber du med eksempler