2010-06-07 25 views

Respuesta

12

No se puede hacer eso en Java.

Un método sobrecargado es básicamente otro método.

Un intento podía mirar (algo) como esto

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

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

pero no va a trabajar desde Java resuelve sobrecarga mirando el "mejor partido" o "firma más específica".

El método todavía se puede sobrecargar con un

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

que se llama cuando se hace yourMethod("hello", "world").

Por cierto, ¿por qué quieres evitar la sobrecarga? Quizás hay otra forma de hacer lo que quieres?

3

Marque la clase final y no se puede extender. Sin embargo, eso puede vencer a otro propósito.

+0

... como anulación :-) – aioobe

0

Si sobrecarga un método, ha creado un método con el mismo nombre pero diferentes tipos de parámetros. En Java, un método se define (en parte) en términos de sus parámetros y, por lo tanto, si dos métodos tienen el mismo nombre pero diferentes parámetros, entonces son manzanas y naranjas, es decir, no iguales. En resumen, no puede evitar que alguien cree nuevos métodos en una clase, que es esencialmente lo que está pidiendo.

-1

Anulación y sobrecarga son técnicas diferentes. La sobrecarga es una forma de declarar múltiples métodos con los mismos nombres pero diferentes tipos de parámetros o diferentes no de parámetros.

+2

La sobrecarga no es una técnica de OOP en absoluto. Es una propiedad útil que usa información estática en tiempo de compilación para dar dos funciones posiblemente no relacionadas con el mismo nombre en el código fuente. – Zorf

+0

Gracias Lajla. No sabía que no era parte de OOP. – Sujee

+0

Se eliminó la palabra 'OOP' de mi respuesta ya que entendí mal que la sobrecarga es una de las técnicas de OOP. – Sujee

-2

Usted puede prevenir un método de ser sobrescritos por lo que es final, pero no se puede evitar que un método de ser sobrecargado . Bien técnicamente podrías hacer que la clase sea definitiva, para que no se puedan agregar métodos al crear una subclase, pero no creo que sea un buen diseño.

+13

Los métodos se anulan, no se sobrescriben. –

+0

Has tenido seis años para solucionar esto. Votando para borrar. – EJP

14

No puede. Porque es casi inútil.

Si desea sobrecargar el método handle(..) pero no está permitido, en su lugar crearía doHandle(..).

Qué método sobrecargado se utiliza se determina en tiempo de compilación (en contraste con los métodos reemplazados, que se determinan en tiempo de ejecución). Entonces, el punto de sobrecarga es compartir un nombre común para operaciones comunes. Denegar eso es una cuestión de estilo de código, en lugar de cualquier otra cosa.

+2

+1 por inútil. Un compilador nunca seleccionará (uno de) los métodos de sobrecarga en lugar de uno sobrecargado. –

4

Err ... ¿qué sentido tiene no permitir sobrecargar el método?

La protección contra Anulación está permitida porque puede ser realizada por otro programador que supuestamente está trabajando en otra parte del código y su clase es heredada de su clase.

La sobrecarga se realiza en la misma clase y lógicamente se supone que debe ser realizada por un programador que conoce este código y está trabajando en la misma parte del código.Por lo tanto, si conoce este código (teóricamente) y existe un peligro inherente en la sobrecarga, entonces ya debe saberlo porque conoce el código.

Dicho esto, la sobrecarga no se puede detener ya que otros ya han descrito.

0

simple! no llame a ese método sobrecargado.

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