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) {
}
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() {
}
// 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;
}
}