Heim > Java > javaLernprogramm > Können überschreibende Methoden in Java unterschiedliche Rückgabetypen haben?

Können überschreibende Methoden in Java unterschiedliche Rückgabetypen haben?

DDD
Freigeben: 2024-11-25 02:35:16
Original
453 Leute haben es durchsucht

Can Overriding Methods in Java Have Different Return Types?

Überschreiben von Methoden mit kovarianten Rückgabetypen in Java

Entgegen der landläufigen Meinung ist es tatsächlich möglich, dass überschriebene Methoden hinsichtlich ihrer Rückgabe abweichen Typen in Java. Genauer gesagt erlaubt Java kovariante Rückgabetypen, sodass eine überschreibende Methode einen Rückgabetyp besitzen kann, der verfeinert ist als der der überschriebenen Methode. Dies bedeutet, dass der Rückgabetyp der überschreibenden Methode dem Rückgabetyp der überschriebenen Methode zuweisbar sein muss.

Ein anschauliches Beispiel wäre das folgende Codefragment:

class ShapeBuilder {
    ...
    public Shape build() {
        ....
    }
}

class CircleBuilder extends ShapeBuilder{
    ...
    @Override
    public Circle build() {
        ....
    }
}
Nach dem Login kopieren

In diesem Fall , überschreibt die build()-Methode der CircleBuilder-Klasse die von ShapeBuilder geerbte build()-Methode. Entscheidend ist, dass die build()-Methode in CircleBuilder ein Circle-Objekt zurückgibt, das im Vergleich zum von ShapeBuilder zurückgegebenen Shape-Objekt einen spezifischeren Typ hat.

Dieses Verhalten ist in Abschnitt 8.4.5 der Java-Sprachspezifikation kodifiziert. Darin heißt es ausdrücklich: „Rückgabetypen können zwischen Methoden variieren, die sich gegenseitig überschreiben, wenn es sich bei den Rückgabetypen um Referenztypen handelt.“ Dieses Prinzip liegt dem Konzept kovarianter Rückgaben zugrunde, wobei der Rückgabetyp einer überschreibenden Methode auf einen Untertyp spezialisiert werden kann.

Darüber hinaus werden in der Spezifikation spezifische Bedingungen beschrieben, die für die Ersetzbarkeit des Rückgabetyps zwischen zwei Methoden erfüllt sein müssen :

  • Void-Rückgabetypen müssen genau übereinstimmen.
  • Primitive Rückgabetypen müssen übereinstimmen identisch.
  • Referenzrückgabetypen müssen entweder:

    • Subtypen voneinander sein.
    • Durch ungeprüfte Konvertierung in einen Subtyp voneinander konvertierbar sein.

Vor Java 5 hielt Java an der invarianten Rückgabe fest Typen. Im Gegensatz dazu bieten kovariante Rückgabetypen eine größere Flexibilität beim Überschreiben von Methoden, sodass die Rückgabetypen besser an der spezifischen Implementierung der überschriebenen Methode ausgerichtet werden können.

Das obige ist der detaillierte Inhalt vonKönnen überschreibende Methoden in Java unterschiedliche Rückgabetypen haben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage