Перегрузка метода не работает должным образом - PullRequest
0 голосов
/ 22 октября 2018

В Java перегрузка функции относится к типу или номеру параметра функции, если я не верен, пожалуйста, исправьте меня

Я собирался пройти тестирование, но обнаружил, что с перегрузкой Java что-то не так, как public static void doSomeThing() иpublic static int doSomeThing().

Обе функции одинаковы и не должны компилироваться, но работают.

Как этот код.

package com.sudeep.test;

public class StaticFunctionOverload {
    public static void main(String arg[]) {
        doSomeThing();

    }

    public static int doSomeThing() {
        System.out.println("Im in int block");
        return -1;
    }

    public static void doSomeThing() {
        System.out.println("Im in void block");
    }

}

Error in code but still running on eclipse

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Как уже упоминалось несколько раз, не должен компилироваться.Но я также вижу ваш скриншот и путаницу, когда он действительно запускается на вашем компьютере.

Я думаю, что вы видите, что есть "особенность" затмения, когда он запускает старую сборку классакогда он сталкивается с ошибками .Я предполагаю, что вы ранее создали и запустили класс только с помощью метода int, прежде чем добавить void.

Если это так, вы можете сделать несколько вещей:

  1. Если вы действительно хотите сохранить эту функцию (запустить старую версию при наличии ошибок), вы можете выполнить очистку (меню: Project > Очистить ... ) очистить ранее построенную версию.Если вы сейчас попытаетесь запустить, Java остановится и пожалуется, что не может создать ваш исходный код.
  2. Если вы считаете, что эта «функция» действительно может быть вредной, перейдите к Окно> Настройки> Выполнить /Отладка> Запуск> Продолжить запуск, если проект содержит ошибки> Подсказка

enter image description here

0 голосов
/ 22 октября 2018

Подписи методов должны быть разными:

Язык программирования Java поддерживает методы перегрузки, и Java может различать методы с разными сигнатурами методов.Это означает, что методы в классе могут иметь одно и то же имя, если они имеют разные списки параметров (есть некоторые уточнения к этому, которые будут обсуждаться в уроке под названием «Интерфейсы и наследование»).

Чтениеэто:

https://docs.oracle.com/javase/tutorial/java/javaOO/methods.html

Итак, это будет работать, например:

package com.sudeep.test;

public class StaticFunctionOverload {
    public static void main(String arg[]) {
        doSomeThing();

    }

    public static int doSomeThing() {
        System.out.println("Im in int block");
        return -1;
    }

    public static void doSomeThing(int param1) {
        System.out.println("Im in void block with " + param1);
    }

}
...