Przeciążenie innym typem zwrotu w Javie?

Dlaczego nie jest możliwe przeciążenie funkcji poprzez zmianę typu zwracanego? Czy to się zmieni w przyszłej wersji Javy?

Przy okazji, tak dla przypomnienia, czy jest to możliwe w C++?

Author: Pang, 2010-03-13

8 answers

Nie możesz tego zrobić w Javie i nie możesz tego zrobić w C++. Uzasadnieniem jest to, że sama wartość zwracana nie jest wystarczająca dla kompilatora, aby dowiedzieć się, którą funkcję wywołać:

public int foo() {...}
public float foo() {..}

...
foo(); // which one?
 131
Author: Alexander Gessler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-13 19:51:49

Powodem jest to, że przeciążenia w Javie są dozwolone tylko dla metod z różnymi podpisami .

Typ zwracany nie jest częścią podpisu metody, dlatego nie może być używany do rozróżniania przeciążeń.

Zobacz Definiowanie metod z samouczków Javy.

 41
Author: Oded,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-13 19:53:23

Przed wersją Java 5.0, gdy nadpisujesz metodę, zarówno parametry, jak i typ zwracany muszą być dokładnie dopasowane. W Javie 5.0 wprowadza nowy obiekt o nazwie covariant return type. Można nadpisać metodę z tym samym podpisem, ale zwraca podklasę zwracanego obiektu. Innymi słowy, metoda w podklasie może zwrócić obiekt, którego typ jest podklasą typu zwracanego przez metodę z tym samym podpisem w superklasie.

 21
Author: Daneel S. Yaitskov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-19 16:54:13

Overloaded metody w Javie mogą mieć różne typy zwrotów, biorąc pod uwagę, że listy argumentów również są różne.

 5
Author: Abdullah Khan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-15 07:36:01

Kompilator nie bierze pod uwagę typu zwracanego podczas różnicowania metod, więc nie Można zadeklarować dwóch metod z tym samym podpisem, nawet jeśli mają inny typ zwracania.

 1
Author: Ganesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-23 06:38:16

Typ powrotu nie ma znaczenia podczas przeciążania metody. Musimy tylko upewnić się, że nie ma dwuznaczności!

Jedynym sposobem, aby Java wiedziała, którą metodę wywołać, jest rozróżnienie typów listy argumentów. Gdyby kompilator zezwalał na dwie metody o tej samej nazwie i tym samym typie argumentów, nie byłoby możliwości określenia, którą z nich powinien wywołać.

 1
Author: Vinayak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-18 15:27:35

Kompilator nie bierze pod uwagę typu zwracanego podczas różnicowania metod, więc nie Można zadeklarować dwóch metod z tym samym podpisem, nawet jeśli mają inny typ zwracania.

Jeśli jesteś świadomy wykonywania funkcji, to będziesz świadomy, że gdy wywołamy funkcję, wykonuje się część definicji i w końcu wymagamy instrukcji return, stąd możemy powiedzieć, że return pochodzi po całej definicji funkcji, dlatego jeśli istnieją dwie lub więcej funkcji o tej samej nazwie i o tej samej nazwie typ i nr argumentăłw, to w momencie wywoĹ 'ania jak kompilator bÄ ™ dzie wiedziaĺ', ktĂłry ma byÄ ‡ wywoĹ ' any, poniewaĹź nazwa funkcji i parametry sÄ ... takie same. W momencie wywołania najpierw skupimy się na argumentach i nazwie funkcji, a po zakończeniu definicji funkcji w końcu mamy do czynienia z instrukcją return.

Błąd czasu kompilacji jest lepszy niż błąd czasu uruchomienia. Tak więc, java compiler renderuje błąd czasu kompilatora, jeśli zadeklarujesz tę samą metodę o tych samych parametrach.

 0
Author: LearnAndHelp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-17 07:45:54

NO nie naprawdę możliwe w ten sposób można przeciążać tylko przez liczbę argumentów lub typ danych argumentów

 -1
Author: MAYANK AMRIT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-27 15:08:13