Herencia en Java
La herencia es una caracteristica de los lenguajes orientados a objetos la cual nos da la posibilidad de reutilizar codigo, esto es definir una clase a partir de otra clase comun. Supongamos que tenemos la necesidad de registrar caracteristicas y funciones de Empleados y Clientes en un programa cualquiera. Nos damos cuenta que tanto empleados como clientes comparten muchas caracteristicas en comun, nombre direccion edad etc, y seria tonto definirlas en ambas clases, por lo que creamos una clase que comparta sus caracteristicas comunes (variables y metodos) y luego a partir de esa clase creamos las demas, las clases que heredan posteriormente pueden incluir sus propias caracteristicas que la diferencian de las demas, ESTO ES HERENCIA.
Para que una clase herede de otra en java se utiliza la palabra reservada extends. La clase de la cual vamos a heredar no necesita especificar nada para lograrlo, simplemente en la clase en la cual heredaremos especificamos con la palabra extends y luego el nombre de la clase de la cual heredaremos. En esta clase llamaremos al metodo super, el cual nos permite registrar los valores en la superclase a traves de su constructor.
La clase de la cual heredan se le llama superclase y la clase que hereda es conocida como subclase, si B hereda de A y C hereda de B, entonces B y C son sublases de la superclase A. B seria descendiente directo de A y C seria descendiente indirecto de A. En java se trabaja lo que se conoce como herencia simple, la cual nos permite unicamente heredar de una sola clase, a diferencia de la herencia multiple que nos permite heredar de varias clases como en C++. Algunas tecnicas permite simular la herencia multiple en java, aunque en mi opinion no se deberia de implementar.
En el manejo de los modificadores de acceso cabe mencionar que:
- private: Visible unicamente en la clase que se define
- Sin Modificador: Visible a todas las clases del paquete
- protected: visible a las subclases y a las clases del paquete
- public: Visible a todas las clases.
Super se utiliza para llamar a variables y metodos de la clase padre.
Veamos un ejemplo simple de lo mas basico que explicamos aqui para comprender lo que es la herencia en java.
Clase Persona:
public class Persona { String nombre; String direccion; int edad; public Persona(){ nombre = ""; direccion = ""; edad = 0; } public Persona(String n, String d, int e){ nombre = n; direccion = d; edad = e; } }
Clase Empleado:
public class Empleado extends Persona{ String puesto; public Empleado(String nombre, String direccion, int edad,String puesto){ super(nombre,direccion,edad); this.puesto = puesto; } public String getInformacion(){ return "Nombre:"+nombre+"nDireccion:"+direccion+"nEdad:"+edad+"nPuesto:"+puesto+"n"; } }
Clase Cliente:
public class Cliente extends Persona{ double credito; public Cliente(String nombre, String direccion, int edad, double credito){ super(nombre,direccion,edad); this.credito = credito; } public String getInformacion(){ return "Nombre:"+nombre+"nDireccion:"+direccion+"nEdad:"+edad+"nCredito:"+credito+"n"; } }
Clase Principal:
public class Main { public static void main(String args[]){ Empleado e = new Empleado("Jonathan Melgoza","Calle Falsa 123",21,"Administrador"); System.out.println(e.getInformacion()); Cliente c = new Cliente("Jorge Perez","Calle Lejana 321",22,500.0); System.out.println(c.getInformacion()); } }