Heim >Java >javaLernprogramm >Warum tritt eine Ausnahme auf, wenn eine Unterklasse eine überladene Methode aufruft?

Warum tritt eine Ausnahme auf, wenn eine Unterklasse eine überladene Methode aufruft?

WBOY
WBOYOriginal
2024-03-08 16:48:04559Durchsuche

Warum tritt eine Ausnahme auf, wenn eine Unterklasse eine überladene Methode aufruft?

Warum tritt eine Ausnahme auf, wenn eine Unterklasse eine überladene Methode aufruft?

Bei der objektorientierten Programmierung bezieht sich Überladung auf die Definition mehrerer Methoden in derselben Klasse mit demselben Namen, aber unterschiedlichen Parameterlisten, um unterschiedliche funktionale Implementierungen zu erreichen. Wenn eine Unterklasse von einer übergeordneten Klasse erbt und eine Methode mit demselben Namen in der Unterklasse überladen ist, kann es zu Ausnahmen kommen.

Um genauer zu erklären, warum eine Ausnahme ausgelöst wird, wenn eine Unterklasse eine überladene Methode aufruft, schauen wir uns das folgende Codebeispiel an:

class Parent {
    void display() {
        System.out.println("Parent class display method");
    }
    void display(int num) {
        System.out.println("Parent class display method with parameter");
    }
}

class Child extends Parent {
    void display() {
        System.out.println("Child class display method");
    }
}

public class Main {
    public static void main(String[] args) {
        Parent parent = new Child();
        parent.display();
        parent.display(10);
    }
}

Im obigen Code definieren wir eine übergeordnete Klasse Parent und a Unterklasse Child Es gibt zwei überladene display-Methoden in der übergeordneten Klasse, nämlich die Version ohne Parameter und die Version mit einem ganzzahligen Parameter. Die Unterklasse Child erbt von der übergeordneten Klasse Parent und überschreibt die Methode display in der übergeordneten Klasse. Parent 和一个子类 Child,父类中有两个重载的 display 方法,分别是没有参数的版本和带一个整型参数的版本。子类 Child 继承自父类 Parent,并且重写了父类中的 display 方法。

Main 类中,我们创建了一个父类的引用指向子类的对象。然后尝试分别调用 display 方法和 display(int num) 方法。根据多态的原则,由于引用变量是父类类型,实际对象是子类类型,所以调用的应该是子类 Child 中的方法。

然而,当运行程序时,会发现只有 display 方法被调用,而调用 display(int num) 方法时会产生编译错误。这是因为在继承关系中,子类重载父类的方法,并不会覆盖父类的方法,而只是新增了一个重载的方法。因此,当通过父类引用调用重载方法时,编译器会选择调用父类中定义的方法,而不是子类中重载的方法。

为了解决这个问题,我们可以通过将父类中的方法声明为 final

In der Klasse Main erstellen wir einen Verweis von der übergeordneten Klasse auf das Objekt der Unterklasse. Versuchen Sie dann, die Methode display bzw. die Methode display(int num) aufzurufen. Gemäß dem Prinzip des Polymorphismus sollte die Methode in der Unterklasse Child aufgerufen werden, da die Referenzvariable vom Typ der übergeordneten Klasse und das tatsächliche Objekt vom Typ der untergeordneten Klasse ist.

Beim Ausführen des Programms werden Sie jedoch feststellen, dass nur die Methode display aufgerufen wird und beim Aufruf der Methode display(int num) ein Kompilierungsfehler auftritt. Dies liegt daran, dass in der Vererbungsbeziehung eine Unterklasse, wenn sie die Methode der übergeordneten Klasse überschreibt, die Methode der übergeordneten Klasse nicht überschreibt, sondern nur eine neue überladene Methode hinzufügt. Wenn daher eine überladene Methode über einen Verweis auf die übergeordnete Klasse aufgerufen wird, ruft der Compiler die in der übergeordneten Klasse definierte Methode und nicht die überladene Methode in der untergeordneten Klasse auf. 🎜🎜Um dieses Problem zu lösen, können wir die Methoden in der übergeordneten Klasse als final deklarieren oder alle Methoden in der übergeordneten Klasse in der Unterklasse überladen, um sicherzustellen, dass die Methoden in der Unterklasse als Methode bezeichnet werden ohne eine Ausnahme auszulösen. 🎜🎜Zusammenfassend lässt sich sagen, dass Ausnahmen ausgelöst werden, wenn Unterklassen überladene Methoden aufrufen, da in der Vererbungsbeziehung Unterklassen, die die Methoden der übergeordneten Klasse überladen, die Methoden der übergeordneten Klasse nicht überschreiben. Sie müssen daher darauf achten, dies bei der Verwendung zu vermeiden Es entsteht eine Situation. 🎜

Das obige ist der detaillierte Inhalt vonWarum tritt eine Ausnahme auf, wenn eine Unterklasse eine überladene Methode aufruft?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn