Sobrecarga de métodos y constructores en Java

Hola a todos, hoy os explicare que es y como realizar la sobrecarga de métodos y constructores en Java.

La sobrecarga de métodos significa tener varios métodos con el mismo método pero con distintos parámetros. Si has probado alguna de las clases de Java, habrás visto que un mismo método esta repetido pero con distinto parámetros.

Veamos un ejemplo:

/**
	 * Suma un plus al salario del empleado si el empleado tiene mas de 40 años
	 * @param sueldoPlus
	 * @return true: se suma el plus al sueldo, false: no se suma el plus al sueldo
	 */
	public boolean plus (double sueldoPlus){
		boolean aumento=false;
		if (edad>40 && compruebaNombre()){
			salario+=sueldoPlus;
			aumento=true;
		}
		return aumento;
	}

	/**
	 * Suma un plus al salario aplicandole una retencion del empleado si el empleado tiene mas de 40 años
	 * @param sueldoPlus
	 * @param retencion
	 * @return true: se suma el plus al sueldo, false: no se suma el plus al sueldo</li>
         *
	 */
	public boolean plus(double sueldoPlus, double retencion){
		boolean aumento=false;
		if (edad>40 && compruebaNombre()){
			salario+=sueldoPlus-(sueldoPlus*retencion);
			aumento=true;
		}
		return aumento;
	}

Como vemos, tenemos dos métodos iguales, pero uno con un parámetro más, esto es la sobrecarga de métodos. Es muy importante tener en cuenta, que si dos métodos tienen el mismo tipo de dato como parámetros y distinto tipo de dato devuelto, esto nos indicara error. Por ejemplo:

/**
	 * Suma un plus al salario del empleado si el empleado tiene mas de 40 años
	 * @param sueldoPlus
	 * @return true: se suma el plus al sueldo, false: no se suma el plus al sueldo
	 */
	public boolean plus (double sueldoPlus){
		boolean aumento=false;
		if (edad>40 && compruebaNombre()){
			salario+=sueldoPlus;
			aumento=true;
		}
		return aumento;
	}

	/**
	 * Suma un plus al salario del empleado si el empleado tiene mas de 40 años
	 * @param sueldoPlus
	 */
	public void plus (double sueldoPlus){

		if (edad>40 && compruebaNombre()){
			salario+=sueldoPlus;
		}
	}

Este ejemplo anterior daría error.

Con los constructores pasa exactamente igual, podemos sobrecargar los constructores de la misma forma. Veamos un ejemplo:

	/**
	 * Constructor por defecto
	 */
	public Empleado(){
		this ("", "", 0, SALARIO_DEF);
	}

	/**
	 * Constructor con 2 parametros
	 * @param nombre nombre del empleado
	 * @param apellido nombre del empleado
	 */
	public Empleado(String nombre, String apellido){
		this (nombre, apellido, 0, SALARIO_DEF);
	}

	/**
	 * Constructor con 3 parametros
	 * @param nombre nombre del empleado
	 * @param apellido nombre del empleado
	 * @param edad edad del empleado
	 */
	public Empleado (String nombre, String apellido, int edad){
		this (nombre, apellido, edad, SALARIO_DEF);
	}
	/**
	 * Constructor con 4 parametros
	 * @param nombre nombre del empleado
	 * @param apellido nombre del empleado
	 * @param edad edad del empleado
	 * @param salario salario del empleado
	 */
	public Empleado(String nombre, String apellido, int edad, double salario){
		this.nombre=nombre;
		this.apellido=apellido;
		this.edad=edad;
		this.salario=salario;
	}

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

¿Te ha gustado y quieres apoyarme? ¡Sé mi patrón!
Etiquetas

3 comments

  1. Buenos días, tengo una duda relacionada con la sobrecarga y el polimorfismo.

    Si tenemos un método con el mismo nombre en la clase padre y en la clase hija pero con diferentes parámetros, ¿se considera polimorfismo o sobrecarga? ¿Puede existir sobrecarga entre diferentes clases? ¿Puede existir polimorfismo entre diferentes clases si el método tiene el mismo nombre pero cambian los parámetros?

    Muchas gracias por su tiempo,
    Rosa

  2. Para que la explicación sea correcta debería ser : La sobrecarga de métodos significa tener varios métodos con el mismo “nombre” pero con distintos “número parámetros”. Si has probado alguna de las clases de Java, habrás visto que un mismo método esta repetido pero con distinto parámetros.

    Lo digo porque el cuerpo de los métodos (el código entre { } ) puede ser distinto.

  3. en que me ayuda la sobrecarga de metodos??..

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *