Perdona, sé que pido mucho... solo tengo una duda, me gustaria saber que diferencias hay entre estos 2, gracias.
Overload es la sobrecarga de metodos, es que en una misma clase puedas tener dos metodos que se llamen de la misma forma pero que se diferiencen a traves de la cantidad de parametros
Override es sobrescritura de metodos es utilizado cuando hereados los metodos de una clase y un metodo lo redefines en la clase hija esto tiene mas importancia cuando lo combinas con el polimorfismo
te dejo algunos ejemplos:
http://www.programcreek.com/2009/02/overriding-and-overloading-in-java-with-examples/ (http://www.programcreek.com/2009/02/overriding-and-overloading-in-java-with-examples/)
http://www.edu4java.com/es/progbasica/progbasica17.html (http://www.edu4java.com/es/progbasica/progbasica17.html)
Te agradecería si marcas los temas como solucionados (ícono check verde al tema) para mantener el orden.
1. Overloading (sobrecarga)La sobrecarga es cuando
en una misma clase redefines un mismo método. Esta técnica tiene una restricción y es:
- Un método sobrecargado debe tener diferentes parámetros (tipos de dato)
Así, lo siguiente es correcto:
public int multiplicar(int x, int y) {
return x * y;
}
public int multiplicar(float x, float y) {
return x * y;
}
Pero esto es incorrecto:
public int multiplicar(int x, int y) {
return x;
}
public float multiplicar(int x, int y) {
return new Float(String.valueOf(x));
}
A pesar que el tipo de retorno es diferente, los parámetros son iguales, por lo que el compilador lo detectará como el mismo método.
2. Overriding (sobreescritura)
La sobreescritura sucede cuando tu heredas una clase o cuando implementas una interfaz. En el caso de herencia, es obligatorio sobreescribir los métodos de una superclase si estos son abstractos, si no son abstractos, es opcional sobreescribirlos; pero generalmente así sucede para dar un comportamiento polimórfico.
public abstract class Persona {
// obligatorio sobreescribir en subclases
public abstract void lenguaje();
// no es obligatorio, ya que no es abstracto
public void caracteristicas() {
System.out.println("dos ojos, una nariz y una boca");
}
}
public class Canadiense extends Persona {
@Override // indica que se sobreescribe
public void lenguaje() {
System.out.println("Inglés");
}
// método caracteristicas heredado
}
En el caso de una clase que implemente una interfaz, es obligatorio sobreescribir los métodos de la interfaz, siempre y cuando estos no sean default, ya que por defecto, los métodos de una interfaz son públicos y abstractos.
public interface Construccion {
// necesita ser sobreescrito
int cantidadColumnas();
// necesita ser sobreescrito
int cantidadPisos();
// no es necesario sobreescribir
default boolean tieneAsensor() {
return true;
}
}
public class Edicio implements Construccion {
@Override
public int cantidadColumnas() {
return 20;
}
@Override
public int cantidadPisos() {
return 10;
}
}
Muchas gracias!! ahora si lo tengo claro!!