Introduktion til tilsidesættelse i OOP

Under implementering af arvskonceptet i ups bruges alle funktioner i overordnede klassen af ​​alle dets afledte klasser. Men i tilfælde af, at en afledt klasse ønsker den specifikke implementering af den funktion, der er blevet erklæret i overordnet klasse, men bruger det samme navn, samme signatur og samme returtype, anvendes der tilsidesættende funktion. Overstyring gør det muligt for barneklassen at omdefinere den funktion, der allerede er defineret i dets overordnede klasse eller superklasse. På denne måde kan man bruge begge definitionen ved at specificere klassens objekt, mens man kalder metoden. For eksempel, lad der være en sumfunktion i både forældre- og børneklasse, og mens vi kalder den funktion, vi bruger objektet fra underordnet klasse, kaldes metoden, der findes i underordnede klassen, og i stedet for hvis du bruger forældreklasseobjektet, så er metoden til stede i forældreklassen kaldes. denne metode i barneklassen siges at tilsidesætte metoden, der findes i dens superklasser.

Behov for metodeoverskridelse

Følgende er metoder til at tilsidesætte:

  • Runtime polymorphism-metodeoverskridelse hjælper med at opnå runtime-polymorfisme i objektorienterede programmeringssprog som c ++, java, c # osv.
  • Polymorfisme betyder at have mange former, dvs. en signatur og flere definitioner. på objektorienterede sprog, når både afledte og forældreklasse har det samme navn og underskrift af en funktion, når en kompilator på én gang løser definitionen, skal den ringe. Runtime polymorfisme betyder binding af en metodedefinition til en metode, der kaldes, forekommer ved kørsel af et program. Det tillader implementering af "en signatur multiple definition" aspekt af polymorfisme. Denne funktion bruger dynamisk metodeforsendelse, der har et kraftfuldt koncept med objektorienteret design for at bringe kodegenbrug og robusthed. At tilsidesætte en metode giver os mulighed for en metodekald til nogen af ​​dens afledte klasser uden at vide, hvilken type objekt den afledte klasse har.
  • Ved hjælp af denne funktion kan man implementere specialiseret definition til generisk funktion, der er arvet fra dens superklasse.

Hvordan fungerer overstyring i OOP'er?

Nedenstående forklaring siger, at hvordan altoverskridende fungerer:

  • OOP'er, hjælpe os med at implementere runtime-polymorfisme, mens vi arver en klassefunktioner i en anden. Lad os se på arbejdet med at tilsidesætte OOP'er. Antag senere, at vi har et superklasse-navn, der har to funktioner, der taler og spiser. Der er to underklasser kat og hund, der udvider dyret til superklassen.
  • Disse to underklasser bruger de samme funktioner taler og spiser, men ændrer implementeringen men holder underskrivelsen af ​​metoderne den samme. I vores hovedmetode, hvis du kalder disse funktioner ved at vælge referencevariablen, vil det kun på runtime blive besluttet, hvilken funktion den har brug for at kalde. For eksempel, hvis objektet har forskellen mellem barneklasse, der er kat eller hund, kaldes funktionen af ​​en respektive klasse ellers, hvis objektet har referencen til forældreklassen, kaldes funktionen af ​​en dyreklasse.
  • Her skal vi se, at funktionen kaldes ikke afhænger af typen af ​​referencevariabel. Dette afgøres af kompilatoren under kørsel, men det hjælper med at implementere runtime-polymorfisme. Det hjælper også med at implementere den specialiserede definition af metoden til den generiske definition af metoden i forældreklassen.

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

Produktion:

Bemærk: En referencevariabel af barnetype kan ikke bruges til at indeholde en henvisning til den overordnede type.

Regler for tilsidesættelse af en metode

Følgende er reglerne for tilsidesættelse:

Regel 1

En liste over de parametre, der er erklæret i funktionen af ​​forældreklasse, skal matche listen over de parametre, der er nævnt i definitionen af ​​altoverskyggende metode i underordnet klasse.

For eksempel:

Metoden i forældreklassen

public int test1(int a);

En metode i underordnet klasse - offentlig strengtest1 (); // metodeoverskridelse understøttes ikke her, da returtype og argumenter er forskellige, men der kommer ingen fejl i kompileringstid. Denne metode betragtes som en ny metode i en barneklasse.

Regel 2

Returtypen for metoden, der findes i barneklassen, skal være den samme eller en undertype af returtypen for metoden, der tilsidesættes.

For eksempel:

Metoden i en forældreklasse

public Object test1(int a);

Metoden i barneklassen

public String test1();

Ukorrekt

Metoden i forældreklassen

public String test1(int a);

Metoden i barneklassen

public Object test1();

Regel 3

Adgangsspecifikatoren, der findes i metoden for forældreklasse, skal være lige restriktiv eller mere restriktiv end metoden, der tilsidesætter den i barneklassen.

Ukorrekt

Metoden i forældreklassen

public int test1(int a);

Metode i barneklassen

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

Regel 4

Kun forekomstmetoden med adgangsspecifikation som offentlig beskyttet eller standard kan tilsidesættes. Dette skyldes, at kun denne forekomstmetode kan arves af dens underklasse og således siges at blive tilsidesat. I tilfælde af at den forekomstmetode, der er specificeret i overordnet klasse, er mere restriktiv eksempel på offentlig metode, vil den ikke blive arvet i dens underklasse og gør, hvis nogen definerer den samme metode i en underklasse, at scenariet ikke tages som en metode, der overstiger, da offentlige metoder ikke kan være arvet, dette kan ikke tilsidesættes.

For eksempel:

Metoden i forældreklassen

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

Metoden i barneklassen

private int test1();

Ukorrekt

Metoden i forældreklassen

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 betragtes som en ny privat metode til børneklassen

Regel 5

Super-nøgleordet kan bruges til at kalde funktionen af ​​forældreklasse, der er tilsidesat af dens underklasse.

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

Produktion:

Regel 6

En konstruktør af en klasse kan ikke tilsidesættes af dens underklasser, da en konstruktør af to klasser ikke kan være den samme.

Regel 7

Undtagelseshåndtering ved tilsidesættelse.

  • Incase-metode i forældreklassen kaster ikke nogen undtagelse, så den overordnede metode, der findes i underklassen, har lov til at kaste en eneste ikke-markeret undtagelse. I tilfælde af at den overordnede metode viser kontrolleret undtagelse, viser compileren en fejl.
  • Hvis metoden i den overordnede klasse, der tilsidesættes, kaster en undtagelsestandemoverskridende metode, der findes i underklassen, skal gennem en undtagelse af det samme niveau eller dens undertype i undtagelseshierarkiet eller ingen undtagelse overhovedet.

Regel 8

Fremgangsmådeoverskridelse i flerniveau-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();
)
)

Produktion:

Regel 9

Regler for tilsidesættelse af metoder i Java

  • En synkroniseret metode kan let tilsidesættes af en ikke-synkroniseret metode og vice versa.
  • Abstrakt metode, der findes i abstrakte klasser eller grænseflader, er beregnet til at blive overskrevet for at give specifik implementering af de deklarerede metoder, ellers viser den en kompileringstid-fejl.
  • Definition af en statisk metode med samme navn som en statisk metode, der findes i den overordnede klasse, er kendt som metode, der skjuler ikke metodeoverskridelse, da den ikke implementerer runtime-polymorfisme.
  • Endelige metoder kan ikke tilsidesættes.

Regel nr. 10

Fremgangsmådeoverskridende i C ++

Fremgangsmådeoverskridelse i c plus opnås ved at erklære en metode som virtuel. Et virtuelt nøgleord bruges til at opnå runtime-polymorfisme i c ++. Mens Java alle funktioner som standard tages som virtuelle.

Regel 11

Fremgangsmådeoverskridende adskiller sig fra metodeoverbelastning, da det er en proces med runtime-polymorfisme, hvorimod overbelastning og metode er et eksempel på kompileringstid-polymorfisme. Ved metodeoverskridelse er det obligatorisk at holde underskrift af metoden den samme. når vi foretager nogen ændring i metoden retur type eller parameter liste, 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);
)
)

Produktion:

Hvornår skal man bruge metodeoverskridelse?

Følgende er metoder til at bruge Overriding:

  • OOPs giver et vidunderligt træk ved arv til at danne et stort hierarki mellem superklasse og underklasse er fra mindre specialisering til større specialisering.
  • Kan vi bruge superklassen til at tilvejebringe en ramme, der kan nedarves i alle dens underklasser, og underklasserne, kan vi definere de forskellige funktioner i disse metoder. Dette opnås ved at tilsidesætte funktion, hvor specialiseret funktion kan leveres til de nedarvede metoder i underklasser.
  • Det hjælper også med at skabe en ramme for flere klasser ved at tilvejebringe en samling af variabler og den metode, der skal implementeres i alle dens underklasser.

Konklusion

OOP'er, koncepter gør koden robust og let at genbruge, når de bruges effektivt. Den overordnede funktion forbedrer brugen af ​​arv for at give den specifikke implementering af den generiske metode til overordnet klasse.i dens underklasser. Dette bruger runtime polymorphism-konceptet til at udløse den rigtige definition af metode. Dynamisk metodeforsendelse udføres kun under kørsel, som kontrollerer referencen til den klasse, objektet har, for at kalde metoden. Denne funktion styres gennem forskellige regler og gælder ikke for statiske metoder. Vi kan implementere metodeoverskridelse på ethvert objektorienteret sprog og gøre vores program hurtigere og robust.

Anbefalede artikler

Dette er en guide til tilsidesættelse i OOP'er. Her diskuterer vi, hvordan altoverskyggende fungerer i OOP'er, hvornår det skal bruges, og 11 regler med koder og output. Du kan også gennemgå vores andre relaterede artikler for at lære mere-

  1. Overstyring i PHP
  2. Overskydende i JavaScript
  3. Hvad er OOP?
  4. Metodeoverskridelse i C #
  5. Eksempler på tilsidesættelse i Java
  6. Statisk JavaScript for JavaScript | Sådan arbejder du med eksempler

Kategori: