Einführung in das Überschreiben in OOPs

Bei der Implementierung des Vererbungskonzepts in oops werden alle Funktionen in der übergeordneten Klasse von allen abgeleiteten Klassen verwendet. Wenn jedoch eine abgeleitete Klasse die spezifische Implementierung der Funktion haben möchte, die in der übergeordneten Klasse deklariert wurde, aber denselben Namen, dieselbe Signatur und denselben Rückgabetyp verwendet, wird das überschreibende Feature verwendet. Durch das Überschreiben kann die untergeordnete Klasse die Funktion neu definieren, die bereits in der übergeordneten Klasse oder der übergeordneten Klasse definiert wurde. Auf diese Weise kann man beide Definitionen verwenden, indem man beim Aufruf der Methode das Objekt der Klasse angibt. Angenommen, es gibt eine Summenfunktion sowohl in der übergeordneten als auch in der untergeordneten Klasse. Beim Aufrufen der Funktion wird das Objekt der untergeordneten Klasse aufgerufen. Wenn Sie stattdessen das übergeordnete Klassenobjekt verwenden, wird die vorhandene Methode aufgerufen in der übergeordneten Klasse wird aufgerufen. Von dieser Methode in der untergeordneten Klasse wird gesagt, dass sie die in ihren Oberklassen vorhandene Methode überschreibt.

Notwendigkeit einer Methodenüberschreibung

Es folgen die Methoden zum Überschreiben:

  • Durch Überschreiben der Laufzeit-Polymorphismus-Methode kann Laufzeit-Polymorphismus in objektorientierten Programmiersprachen wie C ++, Java, C # usw. erzielt werden.
  • Polymorphismus bedeutet, viele Formen zu haben, dh eine Signatur und mehrere Definitionen. Wenn in objektorientierten Sprachen abgeleitete und übergeordnete Klasse den gleichen Namen und die gleiche Signatur einer Funktion haben, muss der Compiler beim einmaligen Auflösen der Definition die Funktion aufrufen. Laufzeitpolymorphismus bedeutet, dass eine Methodendefinition zur Laufzeit eines Programms an eine aufgerufene Methode gebunden wird. Es ermöglicht die Implementierung eines Aspekts des Polymorphismus mit einer Signatur und mehreren Definitionen. Diese Funktion verwendet den dynamischen Methodenversand, der über ein leistungsfähiges Konzept des objektorientierten Entwurfs verfügt, um die Wiederverwendung und Robustheit von Code zu gewährleisten. Wenn Sie eine Methode überschreiben, können Sie eine Methode zu einer ihrer abgeleiteten Klassen aufrufen, ohne den Objekttyp der abgeleiteten Klasse zu kennen.
  • Mit dieser Funktion kann eine spezialisierte Definition für generische Funktionen implementiert werden, die von ihrer Oberklasse geerbt wurden.

Wie funktioniert das Überschreiben in OOPs?

Die folgende Erklärung besagt, wie das Überschreiben funktioniert:

  • OOPs helfen uns, Laufzeit-Polymorphismus zu implementieren, während Klassen-Features in ein anderes geerbt werden. Werfen wir einen Blick auf die Funktionsweise des Überschreibens in OOPs. Nehmen wir später an, wir haben ein Superklasse-Namenstier, das zwei Funktionen hat: Sprechen und Fressen. Es gibt zwei Unterklassen Katze und Hund, die den Oberklassennamen Tier erweitern.
  • Diese beiden Unterklassen verwenden dieselben Funktionen wie speak und eat, ändern jedoch die Implementierung, wobei die Signatur der Methoden gleich bleibt. Wenn Sie nun in unserer Hauptmethode diese Funktionen aufrufen und die Referenzvariable auswählen, wird nur zur Laufzeit entschieden, welche Funktion aufgerufen werden muss. Wenn das Objekt beispielsweise die Differenz der untergeordneten Klasse enthält, bei der es sich um eine Katze oder einen Hund handelt, wird die Funktion einer entsprechenden Klasse aufgerufen. Wenn das Objekt die Referenz der übergeordneten Klasse enthält, wird die Funktion einer Tierklasse aufgerufen.
  • Hier sollten wir sehen, dass der Aufruf der Funktion nicht vom Typ der Referenzvariablen abhängt. Dies wird vom Compiler nur zur Laufzeit entschieden, da dies bei der Implementierung des Laufzeit-Polymorphismus hilfreich ist. Es hilft auch, die spezialisierte Definition der Methode der generischen Definition der Methode in der übergeordneten Klasse zu implementieren.

Code:

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

Ausgabe:

Hinweis: Eine untergeordnete Referenzvariable kann nicht zum Speichern einer Referenz auf den übergeordneten Typ verwendet werden.

Regeln zum Überschreiben einer Methode

Es folgen die Regeln zum Überschreiben:

Regel 1

Eine Liste der in der Funktion der Elternklasse deklarierten Parameter sollte mit der Liste der in der Definition der überschreibenden Methode in der Kindklasse genannten Parameter übereinstimmen.

Beispielsweise:

Die Methode in der übergeordneten Klasse

public int test1(int a);

Eine Methode in der untergeordneten Klasse - public string test1 (); // method overriding wird hier nicht unterstützt, da der Rückgabetyp und die Argumente unterschiedlich sind, aber kein Fehler beim Kompilieren auftritt. Diese Methode wird als neue Methode einer untergeordneten Klasse betrachtet.

Regel # 2

Der Rückgabetyp der in der untergeordneten Klasse vorhandenen Methode muss derselbe oder ein Subtyp des Rückgabetyps der zu überschreibenden Methode sein.

Beispielsweise:

Die Methode in einer übergeordneten Klasse

public Object test1(int a);

Die Methode in der untergeordneten Klasse

public String test1();

Falsch

Die Methode in der übergeordneten Klasse

public String test1(int a);

Die Methode in der untergeordneten Klasse

public Object test1();

Regel # 3

Der in der Methode der übergeordneten Klasse vorhandene Zugriffsbezeichner muss ebenso restriktiv oder restriktiver sein als die Methode, die ihn in der untergeordneten Klasse überschreibt.

Falsch

Die Methode in der übergeordneten Klasse

public int test1(int a);

Methode in der Kinderklasse

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

Regel # 4

Nur die Instanzmethode mit dem Zugriffsbezeichner als öffentlich geschützt oder als Standard kann überschrieben werden. Dies liegt daran, dass nur diese Instanzmethode von ihrer Unterklasse geerbt und somit als überschrieben bezeichnet werden kann. Wenn die in der übergeordneten Klasse angegebene Instanzmethode eine restriktivere öffentliche Beispielmethode ist, wird sie nicht in ihrer Unterklasse vererbt, und wenn jemand dieselbe Methode in einer Unterklasse definiert, wird dieses Szenario nicht als überschreibende Methode angesehen, da öffentliche Methoden dies nicht können geerbt werden kann dies nicht überschrieben werden.

Beispielsweise:

Die Methode in der übergeordneten Klasse

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

Die Methode in der untergeordneten Klasse

private int test1();

Falsch

Die Methode in der übergeordneten Klasse

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

Die Methode in der untergeordneten Klasse

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

Es wird als eine neue private Methode der untergeordneten Klasse betrachtet

Regel # 5

Mit dem Schlüsselwort super kann die Funktion der Elternklasse aufgerufen werden, die von ihrer Unterklasse überschrieben wurde.

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

Ausgabe:

Regel # 6

Der Konstruktor einer Klasse kann nicht von ihren Unterklassen überschrieben werden, da der Konstruktor zweier Klassen nicht derselbe sein kann.

Regel # 7

Ausnahmebehandlung beim Überschreiben.

  • Die Incase-Methode in der übergeordneten Klasse löst keine Ausnahme aus. Dann darf die in der Unterklasse vorhandene überschreibende Methode nur eine ungeprüfte Ausnahme auslösen. Wenn die überschreibende Methode eine aktivierte Ausnahme anzeigt, zeigt der Compiler einen Fehler an.
  • Wenn die Methode in der übergeordneten Klasse, die überschrieben wird, eine Ausnahmetandemüberschreibungsmethode auslöst, die in der Unterklasse vorhanden ist, muss sie eine Ausnahme derselben Ebene oder ihres Untertyps in der Ausnahmehierarchie oder gar keine Ausnahme enthalten.

Regel # 8

Das Überschreiben von Methoden bei der Vererbung auf mehreren Ebenen ist ebenfalls möglich.

Code:

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

Ausgabe:

Regel Nr. 9

Überschreiben von Methodenregeln in Java

  • Eine synchronisierte Methode kann leicht durch eine nicht synchronisierte Methode überschrieben werden und umgekehrt.
  • Abstrakte Methoden, die in abstrakten Klassen oder Interfaces vorhanden sind, sollen überschrieben werden, um eine spezifische Implementierung der deklarierten Methoden bereitzustellen. Andernfalls wird ein Fehler beim Kompilieren angezeigt.
  • Das Definieren einer statischen Methode mit demselben Namen wie eine in der übergeordneten Klasse vorhandene statische Methode wird als Methode bezeichnet, die kein Überschreiben von Methoden verbirgt, da sie keinen Laufzeitpolymorphismus implementiert.
  • Endgültige Methoden können nicht überschrieben werden.

Regel # 10

Methodenüberschreibung in C ++

Das Überschreiben von Methoden in c plus wird erreicht, indem eine Methode als virtuell deklariert wird. Ein virtuelles Schlüsselwort wird verwendet, um in c ++ einen Laufzeitpolymorphismus zu erzielen. Während in Java alle Funktionen standardmäßig als virtuell angesehen werden.

Regel # 11

Das Überschreiben von Methoden unterscheidet sich vom Überladen von Methoden, da es sich um einen Prozess des Laufzeitpolymorphismus handelt, wohingegen das Überladen von Methoden ein Beispiel für den Polymorphismus zur Kompilierungszeit ist. Beim Überschreiben von Methoden ist es obligatorisch, die Signatur der Methode gleich zu halten. Wenn wir Änderungen am Rückgabetyp der Methode oder an der Parameterliste vornehmen, wird dies vom Compiler als Methodenüberladung behandelt.

Methodenüberschreibung Methodenüberladung
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);
)
)

Ausgabe:

Wann wird Method Overriding verwendet?

Im Folgenden sind die Methoden zum Verwenden von Overriding aufgeführt:

  • OOPs bieten eine wunderbare Eigenschaft der Vererbung, um eine große Hierarchie zwischen Ober- und Unterklasse zu bilden, die von einer geringeren Spezialisierung zu einer größeren Spezialisierung führt.
  • Können wir die Superklasse verwenden, um ein Framework bereitzustellen, das in allen Unterklassen vererbt werden kann, und die Unterklassen, die wir für die verschiedenen Funktionen dieser Methoden definieren können? Dies wird durch Überschreiben der Funktion erreicht, bei der den geerbten Methoden-Init-Unterklassen spezielle Funktionen zur Verfügung gestellt werden können.
  • Sie können auch ein Framework für mehrere Klassen bereitstellen, indem Sie eine Sammlung von Variablen und die Methode bereitstellen, die in allen Unterklassen implementiert werden muss.

Fazit

OOPs und Konzepte machen Code robust und einfach wiederzuverwenden, wenn sie effektiv verwendet werden. Die überschreibende Funktion erweitert die Verwendung der Vererbung, um die spezifische Implementierung der generischen Methode der übergeordneten Klasse in ihren Unterklassen bereitzustellen. Hierbei wird das Laufzeit-Polymorphismus-Konzept verwendet, um die korrekte Definition der Methode auszulösen. Der dynamische Methodenversand wird nur zur Laufzeit ausgeführt. Dabei wird die Referenz der Klasse überprüft, die das Objekt zum Aufrufen der Methode enthält. Diese Funktion wird durch verschiedene Regeln geführt und gilt nicht für statische Methoden. Wir können das Überschreiben von Methoden in jeder objektorientierten Sprache implementieren und unser Programm schneller und robuster machen.

Empfohlene Artikel

Dies ist eine Anleitung zum Überschreiben in OOPs. Hier diskutieren wir, wie das Überschreiben in OOPs funktioniert, wann es verwendet werden soll und 11 Regeln mit Codes und Ausgaben. Sie können auch unsere anderen verwandten Artikel durchgehen, um mehr zu erfahren.

  1. Überschreiben in PHP
  2. Überschreiben in JavaScript
  3. Was ist OOP?
  4. Methodenüberschreibung in C #
  5. Beispiele für das Überschreiben in Java
  6. Statische JavaScript-Methode | Mit Beispielen arbeiten