Está en la página 1de 14

Herencia y Polimorfismo en Java

Herencia en la programación orientada a objetos es la habilidad de extender una


funcionalidad existente definiendo una nueva clase que hereda funcionalidad de una
clase existente. Lo cual nos ahorrara mucho tiempo a los programadores. Si
contamos con una clase que se acerca a lo que necesitamos; no es necesario crear
una clase desde cero. Podemos aprovecharla y extenderla para crear nuestra nueva
clase. Esta nueva clase se llamará subclase y la clase que ya teníamos se llamará
superclase. La subclase heredara todos los atributos y los métodos que fueron
definidos en la clase padre. Si necesitamos cambiar algún método, se puede
sobrescribir el comportamiento en nuestra subclase; utilizando el mismo nombre y
los mismos argumentos del método que se encuentra en la subclase. O bien si se
requiere crear un nuevo método lo podemos incluir en nuestra subclase. Una clase
puede heredar atributos por dos superclases (clases padres). La herencia múltiple
puede ser usada para agrupar atributos y métodos de distintas clases en una sola.

A continuación, veremos las 2 definiciones de clases para usar la herencia:

1. Superclase: es la clase que pasa sus métodos y atributos a otra clase


para que esta pueda utilizarlos. También conocida como clase padre.
2. Subclase: es la clase que utiliza los métodos y atributos de otra clase
para realizar alguna acción específica. También conocida como clase
hija.
Nota: todas las clases en java heredan funcionalidad de la clase Object.

Implementando la herencia en Java


Para implementar la herencia se usa la palabra clave “extends” en la definición de
la clase hija seguida del nombre de la clase padre.

Con eso ya está heredando la funcionalidad de la clase padre y automáticamente


se convierte en una clase hija.

Sintaxis:
public class ClaseHija extends ClasePadre {

campos;

metodos();

Ejemplo de clase padre en Java

package cursojava;

public class Persona {

private String nombre;

private int edad;

private char sexo;

private boolean hombre;

public Persona(){

public Persona(String nombre, int edad, char sexo){

this.nombre = nombre;
this.edad = edad;

this.sexo = sexo;

public void printMessage(){

System.out.println("Soy una persona.");

public String getNombre() {

return nombre;

public void setNombre(String nombre) {

this.nombre = nombre;

public boolean isHombre(){

return this.hombre;

public int getEdad() {

return edad;
}

public void setEdad(int edad) {

this.edad = edad;

public char getSexo() {

return sexo;

public void setSexo(char sexo) {

this.sexo = sexo;

La clase padre cuenta con sus propios métodos y atributos. Ahora vamos a crear
una clase que herede su funcionalidad.

Ejemplo de clase hija en Java

package cursojava;

public class Empleado extends Persona{

private int numeroEmpleado;


private String departamento;

private String puesto;

public Empleado(){

public Empleado(String nombre, int edad, char sexo, int


numeroEmpleado, String departamento, String puesto){

super(nombre, edad, sexo);

this.numeroEmpleado = numeroEmpleado;

this.departamento = departamento;

this.puesto = puesto;

public int getNumeroEmpleado() {

return numeroEmpleado;

public void setNumeroEmpleado(int numeroEmpleado) {

this.numeroEmpleado = numeroEmpleado;
}

public String getDepartamento() {

return departamento;

public void setDepartamento(String departamento) {

this.departamento = departamento;

public String getPuesto() {

return puesto;

public void setPuesto(String puesto) {

this.puesto = puesto;

La clase Empleado está heredando toda la funcionalidad de la clase Persona.


Ahora solo falta usar la clase persona para obtener información de la clase padre y
demostrar así la herencia.
package cursojava;

public class HerenciaMain {

public static void main(String[] args) {

Empleado pedro = new Empleado();

pedro.setNombre("PEDRO");

pedro.setEdad(20);

pedro.setSexo('M');

pedro.setNumeroEmpleado(1521);

pedro.setPuesto("ADMINISTRADOR");

pedro.setDepartamento("SISTEMAS");

System.out.println("Nombre del empleado: " + pedro.getNombre());

System.out.println("Puesto del empleado: " + pedro.getPuesto());

Salida

Nombre del empleado: PEDRO

Puesto del empleado: ADMINISTRADOR


Polimorfismo en Java
El polimorfismo en Java y en la POO se refiere a que un objeto puede tomar
diferentes formas de comportarse, es decir, que las subclases de una clase pueden
definir su propio comportamiento.

Aun así, compartir comportamiento de su clase padre. Como se puede ver,


la herencia y el polimorfismo en java van muy ligados.
Así que será necesario tener bien claro este concepto para poder entender el
polimorfismo.

En Java, las variables que contienen objetos son variables polimórficas. El término
polimórfico (literalmente: muchas formas) se refiere al hecho de que una misma
variable puede contener objetos de diferentes tipos (del tipo declarado o de
cualquier subtipo del tipo declarado). El polimorfismo aparece en los lenguajes
orientados a objetos en numerosos contextos, las variables polimórficas constituyen
justamente un primer ejemplo.

Para entender el Polimorfismo vamos a realizar un pequeño ejemplo que consistirá


en una clase padre y dos clases hijas.

Estas heredan del mismo padre, cada clase sobrescribirá un método del padre para
ver cómo se comporta el polimorfismo.

Clase padre
Esta clase tiene un método llamado printMensaje(), el cual solo va a imprimir un
mensaje en la consola de salida.

package cursojava.polimorfismo;

public class Animal {

private String especie;

public Animal(String especie){


this.especie = especie;

public void printMensaje(){

System.out.println("Soy un animal de la especie: " +


this.getEspecie());

public String getEspecie() {

return especie;

public void setEspecie(String especie) {

this.especie = especie;

Las clases hijas


Cada una tiene sus métodos y atributos, las dos heredan la funcionalidad del padre,
también las dos hijas están sobrescribiendo el método printMensaje() del padre.
Clase hija 1 Clase hija 2
package cursojava.polimorfismo; package cursojava.polimorfismo;
public class Perro extends Animal{ public class Gato extends Animal{

private String nombre; private String nombre;

public Perro(String especie, public Gato(String especie, String


String nombre){ nombre){

super(especie); super(especie);

this.nombre = nombre; this.nombre = nombre;

} }

public void printMensaje(){ public void printMensaje(){

super.printMensaje(); super.printMensaje();

System.out.println("Soy un System.out.println("Soy un
perro que ladra"); gato que maulla");

} }

public String getNombre() { public String getNombre() {

return nombre; return nombre;

} }

public void setNombre(String public void setNombre(String


nombre) { nombre) {

this.nombre = nombre; this.nombre = nombre;


} }

} }

Ejecución del ejemplo de Polimorfismo en Java


Para probar el polimorfismo vamos a realizar un programa que implementa a las
clases que acabamos de crear en las imágenes anteriores y vamos a imprimir con
el método printMensaje() para ver su comportamiento.

package cursojava.polimorfismo;

public class PolimorfismoMain {

public static void main(String []args){

Animal fido, snarf;

fido = new Perro("Perro", "Fido");

snarf = new Gato("Gato", "Snarf");

fido.printMensaje();

snarf.printMensaje();

Como se puede apreciar en la imagen anterior, se están declarando dos variables


de la clase Animal.
Posteriormente esas variables son instanciadas con el operador “new” y pasan a
ser instancias de las clases “Perro” y “Gato” respectivamente.
Después cada objeto imprime su propio mensaje.
Salida: en el resultado podemos observar que se imprime un mensaje que está
declarado en el padre y otro mensaje cuando se sobrescribió el
método printMensaje() en cada uno de los hijos.
Con esto podemos comprobar la herencia ya que los hijos están presentando
comportamiento propio y también comportamiento de su clase padre.

Soy un animal de la especie: Perro

Soy un perro que ladra

Soy un animal de la especie: Gato

Soy un gato que maulla

Palabra clave super en Java


Como ya se vio en la herencia y polimorfismo en java, se hace herencia de una
clase padre a una o más clases hijo.
Pero qué pasa si queremos por ejemplo hacer referencia al método constructor del
padre o a algún atributo del padre si tal vez dicho atributo se llama igual que el
atributo del hijo, habría una confusión.
Para eso está la palabra clave “super” con la cual podemos hacer referencia a
métodos y atributos de la clase padre.
Si en una subclase queremos llamar al constructor de la superclase, en el
constructor de la subclase tenemos que llamar a uno de los constructores de la
super clase con la siguiente sintaxis:

public ConstructorSubClase(parametros){

super(parametros);

asignaciones_propias;
}

También, Si queremos llamar a un método que se encuentra en


la superclase:
super.nombreMetodo();

Para llamar a un atributo de la superclase:


super.nombreAtributo;

Este último NO se utilizaría, ya que, si aplicamos la encapsulación en la


clase padre, tendríamos acceso a través de los métodos set y get respectivos.
Ejemplos:
public Perro(String especie, String nombre){

//Uso de SUPER para llamar un metodo contructor de la clase padre

super(especie);

this.nombre = nombre;

public void printMensaje(){

//Uso de super para llamar un metodo de la clase padre

super.printMensaje();

System.out.println("Soy un perro que ladra");

}
Referencias:
https://mariocelis.com/java/herencia-y-polimorfismo/

https://educandocs.com/2020/11/02/herencia-y-polimorfismo/

También podría gustarte