Как предотвратить перегрузку метода в Java?

Преодоление метода может быть предотвращено с помощью ключевого слова final, также как предотвратить перегрузку?

Ответ 1

Вы не можете сделать это на Java.

Перегруженный метод - это в основном просто другой метод.

Попытка могла выглядеть (что-то вроде этого)

void yourMethod(String arg) { /* ... */ }

void yourMethod(String arg, Object... prevent) {
    throw new IllegalArgumentException();
}

но он не будет работать, поскольку Java разрешает перегрузку, глядя на "наилучшее соответствие" или "наиболее конкретную подпись".

Этот метод все равно может быть перегружен с помощью

void yourMethod(String arg, String arg2) { /* ... */ }

который будет вызываться при выполнении yourMethod("hello", "world").

Btw, почему вы хотите предотвратить перегрузку? Возможно, есть другой способ сделать то, что вы хотите?

Ответ 2

Вы не можете. Потому что это почти бессмысленно.

Если вы хотите перегрузить метод handle(..), но вы запрещены, вы должны создать doHandle(..).

Какой перегруженный метод используется во время компиляции (в отличие от переопределенных методов, которые определяются во время выполнения). Таким образом, точка перегрузки - это общее имя для общих операций. Отказ в том, что это вопрос стиля кода, а не что-то еще.

Ответ 3

Err... какая точка не позволяет перегрузить метод?

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

Перегрузка выполняется в том же классе и логически предполагается, что ее выполняет программист, который знает этот код и работает над той же частью кода. Итак, если он знает этот код (теоретически) и существует какая-то присущая опасность при перегрузке, то он должен знать об этом уже потому, что он знает код.

Тем не менее, перегрузка не может быть остановлена, как уже описано другими.

Ответ 4

Отметьте окончательный класс и его нельзя продлить. Это может победить и другие цели.

Ответ 5

Если вы перегружаете метод, вы создали метод с тем же именем, но с разными типами параметров. В Java метод определяется (частично) с точки зрения его параметров, и, следовательно, если два метода имеют одно и то же имя, но разные параметры, то это яблоки и апельсины, т.е. Не то же самое. Короче говоря, вы не можете помешать кому-то создавать новые методы в классе, что по сути является тем, о чем вы просите.

Ответ 6

просто! не вызывайте этот перегруженный метод.

public class Test
{

   public void m(int a)
     {
       *your definition*
     }
public void m(float a)
     {
       *your definition*
     }
}
public static void main(Strings [] args)
{
  Test t=new Test();
  t.m(5);
}

Ответ 7

Переопределение и перегрузка - это разные методы. Перегрузка - это способ объявления нескольких методов с одинаковыми именами, но с разными типами параметров или с разными параметрами.

Ответ 8

Вы можете запретить переписывать метод, сделав его окончательным, но вы не можете предотвратить перегрузку метода . Ну, технически вы могли бы сделать сам класс окончательным, так что никакие методы вообще не могут быть добавлены путем создания подкласса, но я не думаю, что это хороший дизайн.