Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Carlosjava en 28 Julio 2015, 17:49 pm



Título: Diferencias entre overload y override??
Publicado por: Carlosjava en 28 Julio 2015, 17:49 pm
Perdona, sé que pido mucho... solo tengo una duda, me gustaria saber que diferencias hay entre estos 2, gracias.


Título: Re: Diferencias entre overload y override??
Publicado por: crack81 en 28 Julio 2015, 18:06 pm
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)


Título: Re: Diferencias entre overload y override??
Publicado por: Usuario Invitado en 28 Julio 2015, 18:56 pm
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
  1. public int multiplicar(int x, int y) {
  2. return x * y;
  3. }
  4.  
  5. public int multiplicar(float x, float y) {
  6. return x * y;
  7. }

Pero esto es incorrecto:

Código
  1. public int multiplicar(int x, int y) {
  2. return x;
  3. }
  4.  
  5. public float multiplicar(int x, int y) {
  6. return new Float(String.valueOf(x));
  7. }

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
  1. public abstract class Persona {
  2.  
  3. // obligatorio sobreescribir en subclases
  4. public abstract void lenguaje();
  5.  
  6. // no es obligatorio, ya que no es abstracto
  7. public void caracteristicas() {
  8. System.out.println("dos ojos, una nariz y una boca");
  9. }
  10.  
  11. }

Código
  1. public class Canadiense extends Persona {
  2.  
  3. @Override // indica que se sobreescribe
  4. public void lenguaje() {
  5. System.out.println("Inglés");
  6. }
  7.  
  8. // método caracteristicas heredado
  9.  
  10. }

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
  1. public interface Construccion {
  2.  
  3. // necesita ser sobreescrito
  4. int cantidadColumnas();
  5.  
  6. // necesita ser sobreescrito
  7. int cantidadPisos();
  8.  
  9. // no es necesario sobreescribir
  10. default boolean tieneAsensor() {
  11. return true;
  12. }
  13.  
  14. }

Código
  1. public class Edicio implements Construccion {
  2.  
  3. @Override
  4. public int cantidadColumnas() {
  5. return 20;
  6. }
  7.  
  8. @Override
  9. public int cantidadPisos() {
  10. return 10;
  11. }
  12.  
  13. }
  14.  


Título: Re: Diferencias entre overload y override??
Publicado por: Carlosjava en 28 Julio 2015, 22:23 pm
Muchas gracias!! ahora si lo tengo claro!!