Debemos saber que estas propiedades de la Programación Orientada a Objetos nos traen algunas ventajas como por ejemplo la facilidad, extensibilidad y flexibilidad en el código......
Pero que son?
Sobrecarga de métodos (Overloading)
1. crear 2 métodos, uno llamado sumaEnteros(int a, int b) y otro sumaDoubles(double a, double b)
2. Aplicar el concepto de sobrecarga, donde aunque también vamos a crear 2 metodos, los vamos a llamar con el mismo nombre pero con diferentes parametros....sumar(int a, int b) y sumar(double a, double b) quedando algo como esto:
public void sumar(int a, int b)
{
int suma=a+b;
System.out.println("la suma es: "+suma);
}
public void sumar(double a, double b)
{
double suma=a+b;
System.out.println("la suma es: "+suma);
}
podemos ver que los 2 métodos se llaman igual pero poseen parámetros diferentes, así cuando sean llamados, dependiendo del parámetro enviado se accede al método.Y No es igual? para que sobrecargar si en ultimas se crea el mismo numero de métodos?
Por ejemplo encender un motor..... y si tenemos diferentes tipos de encendido como el eléctrico, encendido térmico, encendido de combustión etc etc... donde los procesos son muy diferentes pero en ultimas el objetivo es el mismo, pero cada uno necesita ciertas características únicas para encender.... aquí podríamos aplicar la sobrecarga para no preocuparnos por llamar los métodos por su nombre sino tan solo llamando al mismo pero enviando los parámetros (características) propios de cada tipo de motor y listo, dependiendo de lo que mandemos java sabrá que motor queremos iniciar.....
Sobreescritura de métodos (Overriding)
por la razón anterior, la sobreescritura nos permite extender la funcionalidad de un método heredado para hacerlo especifico a lo que necesitemos, pudiendo implementar la lógica que queramos en nuestras clases hijas para el mismo método......
y cuales son las reglas?Así como en la sobrecarga nos fijamos en los parámetros, en la sobreescritura nos debemos fijar en que la estructura del método sea igual a la de su superClase, no solo el mismo nombre sino el mismo numero de argumentos y tipo de retorno (o al menos un subtipo de este), así como no tener un nivel de acceso mas restrictivo que el original (que en la clase padre sea protected y en la hija sea private por ejemplo).... tampoco se pueden sobreescribir métodos static ni final.... (ya que static representa métodos globales y final constantes...)Algo que también debemos mencionar es que podemos identificar un método sobreescrito cuando tiene la anotación @override, esto es muy común encontrarlo cuando trabajamos con clases abstractas o interfaces, donde se obliga a implementar los métodos de estas si son heredadas o implementadas respectivamente...... sin embargo no es obligatorio ponerlo pero si es recomendable (tal como lo menciona "David" en un comentario de esta entrada sobre el polimorfismo) pues de esta manera el compilador reconoce que se están sobreescribiendo los métodos ayudando a que si nos equivocamos al crear un método distinto, el compilador nos avisaría....... adicionalmente si tenemos la anotación inmediatamente podremos saber que se está aplicando el concepto, algo muy útil cuando trabajamos con código de otras personas...Veamos un ejemplo donde se sobreescribe el método tocar()Public class Instrumento{
public String tipo;
public abstract void tocar()
{
System.out.println("Tocar un Instrumento");
}
}
class Guitarra extends Instrumento {
@Override
public void tocar() {
System.out.println("Tocar La Guitarra");
}
}
Como vemos la clase Guitarra hereda de la clase Instrumento, esta ultima tiene el método tocar() con una implementación diferente a la del método en la clase Guitarra (el mensaje es distinto), al tener la anotación @Override nos damos cuenta que se está sobreescribiendo dicho método y se le puede dar la lógica que queramos especifica para la clase Guitarra....
Ingresar a uno u otro método depende de la lógica del llamado.... también es algo muy ligado al polimorfismo donde por medio de este se puede acceder a uno u otro método..... por ejemplo si queremos acceder al método
tocar() de la clase guitarra aplicando la sobreescritura y el polimorfismo tendríamos que hacer una instancia de la clase padre con un objeto de la clase hija así:Instrumento miGuitarra=new Guitarra();con esto accederíamos al método tocar de la clase guitarra...... (si te queda confuso este concepto te invito a ver estas entradas sobre el polimorfismo aquí y aquí.....)
miGuitarra.tocar();
- Ejemplo de Polimorfismo.
- Conceptos Básicos de Programación Orientada a Objetos.
- Herencia en Java.
- Clases Abstractas.
- ¿ String Vrs StringBuffer Vrs StringBuilder ?
- Comparando Fechas En Java
- Tutorial Aplicaciones Web con Jboss Seam
- Despliegue de Aplicación Web Con Ant
- Instalación del servidor de aplicaciones JBoss
- Trabajando con SVN desde Eclipse