¿Cuál es la diferencia entre sobrecarga y anulación de métodos? [duplicar]
¿Cuál es la diferencia entre sobrecargar un método y anular un método? ¿Alguien puede explicarlo con un ejemplo?
La sobrecarga de métodos trata de la noción de tener dos o más métodos en la misma clase con el mismo nombre pero con diferentes argumentos.
void foo(int a)
void foo(int a, float b)
Anulación de métodos significa tener dos métodos con los mismos argumentos, pero implementaciones diferentes. Uno de ellos existiría en la clase principal, mientras que otro estará en la clase derivada o secundaria. La @Override
anotación, aunque no es necesaria, puede resultar útil para imponer la anulación adecuada de un método 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.
}
}
La anulación de métodos se produce 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
se extiende java.util.HashSet
. El método add()
se anula en LinkedHashSet
. Si tiene una variable que es de tipo HashSet
y llama a su add()
método, llamará a la implementación apropiada de add()
, en función de si es a HashSet
o a LinkedHashSet
. Esto se llama polimorfismo.
La sobrecarga de métodos consiste en definir 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 entradas y cadenas, y llamará a una versión diferente del método.