Diferencias entre overload y override??

Iniciado por Carlosjava, 28 Julio 2015, 17:49 PM

0 Miembros y 1 Visitante están viendo este tema.

Carlosjava

Perdona, sé que pido mucho... solo tengo una duda, me gustaria saber que diferencias hay entre estos 2, gracias.

crack81

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.edu4java.com/es/progbasica/progbasica17.html
Si C/C++ es el padre de los lenguajes entonces ASM es dios.

Usuario Invitado

#2
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:

    Código (java) [Seleccionar]
    public int multiplicar(int x, int y) {
    return x * y;
    }

    public int multiplicar(float x, float y) {
    return x * y;
    }


    Pero esto es incorrecto:

    Código (java) [Seleccionar]
    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.

    Código (java) [Seleccionar]
    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");
    }

    }


    Código (java) [Seleccionar]
    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.

    Código (java) [Seleccionar]
    public interface Construccion {

    // necesita ser sobreescrito
    int cantidadColumnas();

    // necesita ser sobreescrito
    int cantidadPisos();

    // no es necesario sobreescribir
    default boolean tieneAsensor() {
    return true;
    }

    }


    Código (java) [Seleccionar]
    public class Edicio implements Construccion {

    @Override
    public int cantidadColumnas() {
    return 20;
    }

    @Override
    public int cantidadPisos() {
    return 10;
    }

    }
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

Carlosjava

Muchas gracias!! ahora si lo tengo claro!!