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

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

8 ответов


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

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

попытка может выглядеть (что-то) такой

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

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

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

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

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

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

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


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

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

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


Err... какой смысл не позволять перегружать метод?

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

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

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


отметьте класс final, и он не может быть расширен. Но это может разрушить какую-то другую цель.


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


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

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);
}

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


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