English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In diesem Tutorial werden wir Polymorphie durch Beispiele lernen, verschiedene Arten von Polymorphie und wie man sie in Java implementiert.
Polymorphie ist ein wichtiger Konzept der objektorientierten Programmierung. Es bedeutet nur, dass es nicht nur eine Form gibt. Das heißt, das Verhalten desselben Entitats (Methode, Operator oder Objekt) kann in verschiedenen Situationen unterschiedlich sein. Zum Beispiel,
In Java+Operatoren werden verwendet, um zwei spezifische Funktionen auszuführen. Wenn sie mit Zahlen (Ganzen und Fließkommazahlen) verwendet werden, wird eine Addition durchgeführt.
int a = 5; int b = 6; int sum = a + b; // sum = 11
Wenn wir+Wenn ein Operator mit einem String verwendet wird, führt er eine String-Konkatenation durch. Zum Beispiel,
String firstName = "abc "; String lastName = "xyz"; name = firstName + lastName; // name = abc xyz
In Java kann Polymorphie in zwei Arten unterteilt werden:
Polymorphie zur Laufzeit
Kompilationszeitpolymorphie
In Java kann Polymorphie zur Laufzeit durch Methodenüberschreiben implementiert werden.
Angenommen, dass eine Methode sowohl in der Elternklasse als auch in den Unterklassen erstellt wurde. In diesem Fall hängt die aufgerufene Methode davon ab, auf welchen Objekt der Methode aufgerufen wird. Zum Beispiel,
abstract class Animal { public abstract void makeSound(); } class Dog extends Animal { @Override public void makeSound() { System.out.println("Bark bark.."); } } class Cat extends Animal { @Override public void makeSound() { System.out.println("Meow meow.."); } } class Main { public static void main(String[] args) { Dog d1 = new Dog(); d1.makeSound(); Cat c1 = new Cat(); c1.makeSound(); } }
Ausgabe:
Bark bark… Meow-meow...
Um zu verstehen, wie Method Overriding funktioniert, besuchen Sie bitteMethod Overriding in Java.
Im obigen Beispiel hat die Methode makeSound() in zwei verschiedenen Klassen unterschiedliche Implementierungen. Wenn wir das Programm ausführen
der Ausdruck d1.makeSound() wird die Methode der Klasse Dog aufrufen. Dies liegt daran, dass d1ist ein Objekt der Klasse Dog.
der Ausdruck c1.makeSound() wird die Methode der Klasse Cat aufrufen. Dies liegt daran, dass c1ist ein Objekt der Klasse Cat.
Bestimmt während der Ausführung des Programms, welche Methode aufgerufen wird. Daher ist Method Overriding Laufzeitpolymorphie.
Method Overloading und Operator Overloading in Java ermöglichen Polymorphie bei der Kompilierung.
In Java kann man Methoden mit dem gleichen Namen erstellen, wenn die Parameter unterschiedlich sind. Zum Beispiel:
void func() { ... } void func(int a) { ... } float func(double a) { ... } float func(int a, float b) { ... }
Dies wird in Java als Method Overloading bezeichnet.
Lassen Sie uns das Method Overloading als Beispiel betrachten.
class Demo { public void displayPattern(){ for(int i = 0; i < 10; i++) { System.out.print("*"); } } public void displayPattern(char symbol) { for(int i = 0; i < 10; i++) { System.out.print(symbol); } } } class Main { public static void main(String[] args) { Demo d1 = new Demo(); d1.displayPattern(); System.out.println("\n"); d1.displayPattern('#'); } }
Ausgabe:
********** ##########
In dem obigen Programm wurde die Methode displayPattern() überschrieben
Wenn wir die Methode ohne übergebene Parameter aufrufen, wird eine neue erstellt * Muster des Zeichens.
Wenn wir den Zeichensatz als Parameter an die Methode übergeben, wird das Muster des # Zeichens erstellt.
Für weitere Informationen über Methodenüberladung besuchen Sie bitteMethodenüberladung
Bei der Methodenüberschreibung sollten Methoden in verschiedenen Klassen sein. Bei der Methodenüberladung sollten Methoden in derselben Klasse sein.
Methodenüberschreibung wird zur Laufzeit ausgeführt, während Methodenüberladung zur Kompilierungszeit ausgeführt wird.
Einige Operatoren in Java verhalten sich unterschiedlich zu verschiedenen Operanden. Zum Beispiel,
+ Operatoren werden überladen, um numerische Addition und String-Konkatenation durchzuführen.
&、| und ! werden für logische und bitweise Operationen überladen.
Lassen Sie uns sehen, wie Operatoren in Java überladen werden.
In Java+Operatoren werden verwendet, um zwei spezifische Funktionen auszuführen. Wenn sie mit Zahlen (Ganzen und Fließkommazahlen) verwendet werden, führen sie Additionen durch. Zum Beispiel,
int a = 5; int b = 6; int sum = a + b; // sum = 11
Wenn wir+Wenn ein Operator mit einem String verwendet wird, führt er eine String-Konkatenation durch. Zum Beispiel,
String firstName = "abc "; String lastName = "xyz"; name = firstName + lastName; // name = abc xyz
In ähnlichen Sprachen wie C ++In solchen Sprachen können Operatoren definiert werden, um verschiedene Operationen für verschiedene Operanden durchzuführen. Java unterstützt jedoch keine Benutzerdefinierten Operatorüberladungen.
Polymorphie ermöglicht es uns, konsistente Code zu erstellen. Zum Beispiel,
Angenommen, wir müssen einen Kreis und ein Quadrat zeichnen. Dafür können wir eine Polygon-Klasse erstellen, von der zwei Unterklassen Circle und square ableiten. In diesem Fall ist es erforderlich, in beiden Unterklassen eine Methode mit dem gleichen Namen render() zu erstellen, anstatt Methoden mit verschiedenen Namen zu erstellen.
In unserem Beispiel der Methodenüberladung verwenden wir denselben Methodennamen displayPattern() zur Anzeige von zwei verschiedenen Mustern, um die Konsistenz zu wahren.
Die print() -Methode in Java ist auch ein Beispiel für Polymorphie (Methode überladen). Der gleiche Methodenaufruf wird verwendet, um verschiedene Wertetypen wie char, int, String usw. auszugeben. Wir können auch denselben Methodenaufruf verwenden, um mehrere Werte gleichzeitig auszugeben.
In Java werden Objektvariablen (Instanzvariablen) verwendet, um das Verhalten polymorpher Variablen darzustellen. Dies liegt daran, dass die Objektvariablen einer Klasse Referenzen auf Objekte ihrer eigenen Klasse und auf Objekte ihrer Unterklasse haben können. Zum Beispiel,
class Animal { public void displayInfo() {}} System.out.println("Ich bin ein Tier."); } } class Dog extends Animal { @Override public void displayInfo() {}} System.out.println("Ich bin ein Hund."); } } class Main { public static void main(String[] args) { //Variable der Klasse Animal deklarieren1 Animal a1; //Objekt der Klasse Animal erstellen a1 = new Animal(); a1.displayInfo(); //Objekt einer Dog-Klasse erstellen a1 = new Dog(); a1.displayInfo(); } }
Ausgabe:
Ich bin ein Tier. Ich bin ein Hund.
in dem obigen Beispiel haben wir eine Variable a der Klasse Animal erstellt1. Hierbei ist a1ein polymorpher Variable ist.
dieser Grund ist, dass
im Statement a1 = new Animal(), a1Verweis auf ein Objekt der Klasse Animal.
im Statement a1 = new Dog(), a1Verweis auf ein Objekt der Klasse Dog.
Dies ist ein Beispiel für eine Aufwärtstransformation in Java. Für weitere Informationen besuchen Sie bitteJava Auf- und Abwärtstransformation.