Преодоление метода может быть предотвращено с помощью ключевого слова final
, также как предотвратить перегрузку?
Как предотвратить перегрузку метода в Java?
Ответ 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
Вы можете запретить переписывать метод, сделав его окончательным, но вы не можете предотвратить перегрузку метода . Ну, технически вы могли бы сделать сам класс окончательным, так что никакие методы вообще не могут быть добавлены путем создания подкласса, но я не думаю, что это хороший дизайн.