2012-09-11 12 views
39

¿Cuál es la diferencia entre sobrecargar un método y anulando un método? ¿Alguien puede explicarlo con un ejemplo?¿Cuál es la diferencia entre la sobrecarga de método y la anulación?

+13

¿Alguna investigación? Si es así, ¿qué parte del tema está confundido? – kosa

+11

Esto podría ser un duplicado, y ciertamente es muy básico, pero también es una pregunta real. No es ambiguo, vago, excesivamente amplio o retórico, y puede ser fácilmente respondido en su forma actual por cualquier persona con una comprensión básica de OOP. ¿Por qué las personas cierran preguntas que creen que son demasiado básicas? Eso es lo mismo que decir RTFM. – iconoclast

Respuesta

123

Método sobrecarga trata sobre la noción de tener dos o más métodos en la misma clase con el mismo nombre pero diferentes argumentos.

void foo(int a) 
void foo(int a, float b) 

Método anulando medios que tienen dos métodos con los mismos argumentos, pero diferentes implementaciones. Uno de ellos existiría en la clase principal, mientras que otro estaría en la clase derivada o secundaria. La anotación @Override, aunque no es necesario, puede ser útil para enforce proper overriding of a method en tiempo de compilación.

class Parent { 
    void foo(double d) { 
     // do something 
    } 
} 

class Child extends Parent { 

    @Override 
    void foo(double d){ 
     // this method is overridden. 
    } 
} 
+24

'@ Override' no es necesario. Es una buena práctica, pero no es obligatoria. – GriffeyDog

+6

Lo siento @GriffeyDog. Tiene usted razón "@ Override" no se compulsory.But recordar que está sustituyendo un método, es un buen practice..Thanks para recordar .. –

+5

La sobrecarga no tiene por qué estar en la misma clase, pero también puede hacerse entre los padres clase y clase derivada. – happs

33

La anulación del método es cuando una clase secundaria redefine el mismo método que una clase principal, con los mismos parámetros. Por ejemplo , la clase Java estándar java.util.LinkedHashSet extiende java.util.HashSet. El método add() se reemplaza en LinkedHashSet. Si usted tiene una variable que es de tipo HashSet, y se llama a su método add(), se llamará a la aplicación adecuada de add(), en función de si se trata de un HashSet o una LinkedHashSet. Esto se llama polimorfismo.

Método de sobrecarga está definiendo varios métodos en la misma clase, que aceptan diferentes números y tipos de parámetros. En este caso, el método real llamado se decide en tiempo de compilación, según el número y los tipos de argumentos. Por ejemplo , el método System.out.println() está sobrecargado, por lo que puede pasar enteros, así como cadenas, y se llamará a una versión diferente del método.

+3

Si usted tiene un niño de clase que define el mismo método con parámetros diferentes a continuación, es que considera que tanto primordial y la sobrecarga? – barlop

+4

y luego se sobrecarga solo porque no anula ninguno de los métodos principales. –

Cuestiones relacionadas