Tutorial Java Básico sobre escritura y sobre carga de métodos (Method overriding / overloading)


En este post se explicarán los usos de la sobrecarga y sobre escritura de métodos, sus diferencias así como algunas reglas que se deben seguir para utilizarlos.

Sobre escritura

Cuando se hereda de una clase se heredan algunos de sus métodos,  la sobre escritura de métodos es la posibilidad de una clase de cambiar el comportamiento de los métodos heredados. Esto se realiza debido a que puede que el comportamiento genérico que se hereda del padre no sea suficiente para la clase hija, veamos un ejemplo:

public class Vehicle {
	void run() {
		System.out.println("I'm running fast");
	}
}

class Car extends Vehicle {
	@Override
	void run() {
		System.out.println("I'm running in my 4 wheels");
	}
}

class Bike extends Vehicle {
	@Override
	void run() {
		System.out.println("I'm running in my 2 wheels");
	}
}

En este ejemplo se tienen las clases Bicicleta y Auto que heredan de Vehículo, como se puede observar la clase padre define el método run que imprime la leyenda “I’m running fast” pero las dos sub clases Bicicleta y Auto que sobre escriben el comportamiento del método run y cambian la leyenda que se imprime.

A continuación se presentan algunas reglas al momento de utilizar sobre escritura de métodos:

  • No es posible sobre escribir un método final
  • No es posible sobre escribir un método static
  • La lista de argumentos debe ser la misma que la del método sobre escrito
  • El valor de retorno debe ser del mismo tipo o un sub tipo que la del método sobre escrito
  • El nivel de acceso no puede ser más restrictivo que el método sobre escrito
  • El nivel de acceso puede ser menos restrictivo que el método sobre escrito
  • Es posible sobre escribir métodos solo si son heredados, por la sub clase, por ejemplo, los métodos privados no se heredan
  • Los métodos sobre escritos pueden arrojar cualquier tipo de excepción check
  • Los métodos sobre escritos no pueden arrojar ninguna excepción check nueva

Palabra reservada super

La palabra reservada super es utilizada para referirse a la clase padre, de este modo es posible ejecutar desde la sub clase métodos definidos en la clase padre. Modifiquemos el código mostrado en el ejemplo anterior:

class Car extends Vehicle {
	@Override
	void run() {
		super.run();
		System.out.println("I'm running in my 4 wheels");
	}
}

En este ejemplo, el método sobre escrito definido en la clase Car, ejecutará el método run de la clase Vehicle primero y después imprimirá el mensaje I’m running in my 4 wheels.

Sobre carga de métodos

La sobre carga de métodos permite tener multiples versiones de un método en una clase utilizando diferentes argumentos, imaginemos el siguiente escenario:

public class Calculator {

	int sum(int x, int y) {
		return x + y;
	}

	int sum(int x, int y, int z) {
		return x + y + z;
	}

	int sum(int[] x) {
		int sum = 0;
		for (int i : x) {
			sum += i;
		}
		return sum;
	}
}

En el ejemplo anterior se definen 3 métodos sum que reciben diferentes parámetros, de este modo podemos mantener un código limpio sin tener que crear métodos como sumThreeArguments(), sumTwoArguments(), etc.

A continuación se presentan algunas reglas al momento de utilizar sobre carga de métodos:

  • Es posible sobre cargar un método heredado
  • Un método sobre cargado debe cambiar la lista de argumentos
  • Un método sobre cargado puede cambiar el valor de retorno
  • Un método sobre cargado puede cambiar el modificador de acceso
  • Un método sobre cargado puede declarar excepciones nuevas

Los libros recomendados para este tema son:

Autor: Alejandro Agapito Bautista

Twitter: @raidentrance

Contacto:raidentrance@gmail.com

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s