Ist es möglich, unterschiedliche Rückgabetypen für eine überladene Methode zu haben?

Lesezeit: 4 Minuten

Benutzeravatar von Dunith Dhanushka
Dunith Dhanuschka

Ist es beim Überladen von Methoden möglich, unterschiedliche Rückgabetypen für eine überladene Methode zu haben? zum Beispiel,

void foo(int x) ;
int foo(int x,int y);
double foo(String str);

im Allgemeinen objektorientierte Programmierung, ist es möglich?

  • Dupe von stackoverflow.com/questions/584664/… was selbst eine Dupe von stackoverflow.com/questions/442026/… ist

    – paxdiablo

    11. Mai 2010 um 3:32 Uhr

In einer Klasse können mehrere Methoden den gleichen Namen haben, sich aber unterscheiden

  1. Parametertypen
  2. Anzahl Parameter
  3. Reihenfolge der in der Methode deklarierten Parameter

In Abhängigkeit von den für die Methode bereitgestellten Parametern bestimmt der Compiler zur Laufzeit, welche Version der Methode auszuführen ist.

Eine überladene Methode kann unterschiedliche Rückgabetypen haben oder nicht. Der Rückgabetyp allein reicht dem Compiler jedoch nicht aus, um zu bestimmen, welche Methode zur Laufzeit ausgeführt werden soll.

  • “In der Laufzeit bestimmt der Compiler” AFAIK in der Laufzeit, während das Programm läuft, kann der Compiler nichts bestimmen. und Methodenüberladung ist ein Beispiel dafür Kompilierzeit-Polymorphismus.

    – Aritra Chakraborty

    11. Dezember 2014 um 20:04 Uhr


  • @ Dunith Dhanushka, warum sagst du Reihenfolge der Parameter? void fun(int a, char a){ } void fun(char a, int a){ } es funktioniert nicht

    – Asif Mushtaq

    5. Juni 2015 um 11:08 Uhr


  • Tatsächlich ist die Reihenfolge der Parameter in C++ unbekannt, also -1.

    – Silidron

    2. Oktober 2017 um 14:23 Uhr


  • Eines sei hier noch ergänzt: Das ist in Rust möglich! hat mich umgehauen, als ich es zum ersten Mal dort verwendet sah

    – Lars Frölich

    1. November 2021 um 7:36 Uhr

Benutzeravatar von Sanshayan
Sanshayan

Methodenüberladung bedeutet, zwei oder mehr Methoden mit demselben Namen in derselben Klasse mit unterschiedlichen Argumenten zu haben. Der Vorteil des Überladens von Methoden besteht darin, dass Sie damit Methoden implementieren können, die dieselbe semantische Operation unterstützen, sich jedoch in Argumentnummer oder -typ unterscheiden.

Wichtige Punkte

  • Überladene Methoden MÜSSEN die Argumentliste ändern
  • Überladene Methoden KÖNNEN den Rückgabetyp ändern
  • Überladene Methoden KÖNNEN den Zugriffsmodifikator ändern
  • Überladene Methoden KÖNNEN neue oder breiter geprüfte Ausnahmen deklarieren
  • Eine Methode kann in derselben Klasse oder in einer Unterklasse überladen werden

  • Funktionieren die Szenarien „Überladene Methoden KÖNNEN den Rückgabetyp ändern“ und „•Überladene Methoden KÖNNEN den Zugriffsmodifikator ändern“? Nach meiner praktischen Erfahrung funktioniert es nicht. Bsp.: public class myclass { public int c = 0; öffentlicher String Add(int a, int b) { c=a + b; Rückgabe c.ToString(); } public int Add(int a, int b) { c = a + b; gib c zurück; } }

    – SHEKHAR-BLATT

    28. August 2015 um 11:26 Uhr


  • @SHEKHARSHETE Aber die Argumentliste ist in Ihrem Beispiel unverändert, sie muss geändert werden, andere sind optional

    – jblixr

    26. März 2016 um 5:11 Uhr


Benutzeravatar von Amarnath Rayudu
Amarnath Rayudu

Es ist nicht möglich, eine Methode mit gleichen und unterschiedlichen Parametern zu haben return Typ. Compiler throws error im folgenden Fall (Duplicate-Methode).

Methode 1:

public int calc(int a, int b, int c)

Methode 2:

public String calc(int e, int f, int g)

Fehler geworfen:

method calc(int, int, int) is already defined

  • Es ist auch möglich, Rückgabetypen von generischen Methoden zu überladen. Dies kann beispielsweise in C# erfolgen.

    – Anderson Green

    15. Juni 2021 um 20:34 Uhr

Keine Methodenüberladung ist bei unterschiedlichem Rückgabetyp nicht möglich, da der Compiler nicht herausfinden kann, welche Methode er aufrufen muss.

Benutzeravatar von bharanitharan
bharanitharan

Antwort ist NEIN.

Integer doSomething(){return null;}
String doSomething(){return null;}

main(){
    doSomething()
}

In diesem Fall wird der Compiler nie wissen, welche Methode aufgerufen werden soll.

Hinweis – Das Überladen von Methoden wird während der Kompilierzeit überprüft

Dustins Benutzeravatar
Dustin

Solange du nicht so etwas machst:

int foo (int i, int has_default=0);
double foo (long l);
/* Skipping to the function call.  */
foo (1);

du solltest in Ordnung sein. Der obige Code verursacht Probleme, da er möglicherweise versucht, eine der beiden Funktionen aufzurufen. Es kann wirklich schlimm werden, wenn Sie C++ verwenden und Zeiger anstelle von Primitives oder Referenzen zurückgeben …

Benutzeravatar von lightsing
Beleuchtung

Kurz gesagt, das Überladen des Rückgabetyps erfordert ein leistungsfähiges Typisierungssystem, das die zu verwendende Funktion aus dem Aufrufergebnis ableiten kann.

Die Familie Haskell und ML kann diese Aufgabe erfüllen.

Es ist nicht richtig, das Überladen so zu definieren, dass es auf das Ändern der Argumente beschränkt ist, da das Ändern des Rückgabetyps genügend Informationen für den Compiler hinterlässt, um abzuleiten, welche Funktion verwendet werden soll.

1399990cookie-checkIst es möglich, unterschiedliche Rückgabetypen für eine überladene Methode zu haben?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy