2010-06-07 2 views

ответ

12

Вы не можете сделать это на 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, почему вы хотите предотвратить перегрузку? Возможно, есть еще один способ сделать то, что вы хотите?

3

Отметьте класс final и его нельзя продлить. Тем не менее, это может победить другую цель.

+0

... такие как переопределение :-) – aioobe

0

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

-1

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

+2

Перегрузка не является техникой ООП вообще. Это удобное свойство, которое использует статическую информацию о времени компиляции, чтобы дать двум возможно совершенно несвязанным функциям одно и то же имя в исходном коде. – Zorf

+0

Спасибо, Лайла. Я не знал, что это не часть ООП. – Sujee

+0

Удалено слово «ООП» из моего ответа, поскольку я неправильно понял, что перегрузка является одной из методов ООП. – Sujee

-2

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

+13

Методы переопределяются, а не перезаписываются. –

+0

У вас было шесть лет, чтобы исправить это. Голосование для удаления. – EJP

14

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

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

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

+2

+1 для бессмысленных. Компилятор никогда не будет выбирать (один из) метод перегрузки, а не перегруженный. –

4

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

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

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

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

0

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

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); 
} 
Смежные вопросы