Warum generiert eine Unterklasse eine Fehlermeldung, wenn sie eine überladene Methode aufruft?
In der objektorientierten Programmierung ist Überladen eine Technik, bei der mehrere Methoden mit demselben Namen in derselben Klasse definiert werden. Beim Aufruf einer überladenen Methode bestimmt der Compiler anhand des Parametertyps, der Nummer oder der Reihenfolge der Methode, welche Methode aufgerufen werden soll. Wenn eine Unterklasse jedoch eine überladene Methode erbt, die in einer übergeordneten Klasse definiert ist, werden möglicherweise einige Fehlermeldungen angezeigt. Warum ist das so? Lassen Sie uns dies anhand eines konkreten Codebeispiels erklären.
Angenommen, es gibt eine übergeordnete Klasse Parent
, die eine überladene Methode public void print(int a)
und public void print(String s)
definiert , erbt die Unterklasse Child
die übergeordnete Klasse und versucht, diese beiden überladenen Methoden aufzurufen. Schauen wir uns den folgenden Beispielcode an: Parent
中定义了一个重载方法 public void print(int a)
和 public void print(String s)
,子类 Child
继承了父类并尝试调用这两个重载方法。我们来看看下面的示例代码:
public class Parent { public void print(int a) { System.out.println("Printing integer: " + a); } public void print(String s) { System.out.println("Printing string: " + s); } } public class Child extends Parent { public static void main(String[] args) { Child child = new Child(); child.print(10); // 调用父类的重载方法 print(int a) child.print("Hello"); // 调用父类的重载方法 print(String s) } }
在上面的代码中,子类 Child
实例化后分别调用了父类 Parent
中的重载方法,这个示例是没有问题的,我们成功地调用了两个重载方法并输出了正确的结果。但是,当子类中重载同名方法时,就有可能会产生错误信息。让我们看下面的示例:
public class Child extends Parent { public void print(double d) { System.out.println("Printing double: " + d); } public static void main(String[] args) { Child child = new Child(); child.print(10); // Error: The method print(int) is ambiguous for the type Child child.print("Hello"); // 调用父类的重载方法 print(String s) child.print(10.5); // 调用子类的重载方法 print(double d) } }
在这个例子中,子类 Child
在继承父类的重载方法的同时,又添加了一个新的重载方法 public void print(double d)
。当我们尝试调用 child.print(10)
时,编译器会出现错误信息:The method print(int) is ambiguous for the type Child,这是因为编译器无法确定应该调用父类的 print(int a)
还是子类的 print(double d)
rrreee
Child
nach der Instanziierung die überladene Methode in der übergeordneten Klasse Parent
auf Problem mit diesem Beispiel: Wir rufen beide überladenen Methoden erfolgreich auf und geben die richtigen Ergebnisse aus. Wenn jedoch eine Methode mit demselben Namen in einer Unterklasse überschrieben wird, kann es zu einer Fehlermeldung kommen. Schauen wir uns das folgende Beispiel an: rrreee
In diesem Beispiel erbt die UnterklasseChild
die überladene Methode der übergeordneten Klasse und fügt eine neue überladene Methode public void print(double d) hinzu Code>. Wenn wir versuchen, <code>child.print(10)
aufzurufen, gibt der Compiler eine Fehlermeldung aus: Die Methode print(int) ist für den Typ Child nicht eindeutig. Dies liegt daran, dass der Compiler das übergeordnete Element nicht ermitteln kann Klasse sollte aufgerufen werden. print(int a)
oder print(double d)
der Unterklasse. Um dieses Problem zu lösen, können wir die aufzurufende Methode explizit angeben oder eine Überlastung der vorhandenen Methoden der übergeordneten Klasse in der Unterklasse vermeiden. Wenn eine Methode in einer Unterklasse mit einer Methode in der übergeordneten Klasse in Konflikt steht, kann der Compiler nicht bestimmen, welche Methode aufgerufen werden soll, und generiert daher eine Fehlermeldung. 🎜🎜Bei der objektorientierten Programmierung ist es sehr wichtig, die Konzepte der Überladung und Vererbung zu verstehen. Nur wenn wir diese Funktionen vollständig verstehen, können wir robusteren und klareren Code schreiben. 🎜Das obige ist der detaillierte Inhalt vonWarum generiert eine Unterklasse beim Aufruf einer überladenen Methode eine Fehlermeldung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!