fbpx

Herencia y Polimorfismo en Java

0
Herencia y Polimorfismo en Java
GuardarSavedRemoved 0

Este curso cubre la Herencia y Polimorfismo en Java. Ya que son dos temas fundamentales dentro de la programación orientada a objetos (POO), veremos como se implementa la herencia.

Después veremos como se implementa el polimorfismo y como están relacionadas entre si.
Sigue leyendo este tutorial de java desde cero para aprender estos dos temas tan importantes.

Herencia y Polimorfismo en Java

Lo básico:

Una clase java puede heredar métodos y atributos de otra clase, esto es, que puede utilizar funcionalidad ya existente en otras clases sin tener que re trabajar cierta funcionalidad si está ya existe.

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.
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;

public class Perro extends Animal{
    
    private String nombre;
    
    public Perro(String especie, String nombre){
        super(especie);
        this.nombre = nombre;
    }
    
    public void printMensaje(){
        super.printMensaje();
        System.out.println("Soy un perro que ladra");
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
}
package cursojava.polimorfismo;

public class Gato extends Animal{
    
    private String nombre;
    
    public Gato(String especie, String nombre){
        super(especie);
        this.nombre = nombre;
    }
    
    public void printMensaje(){
        super.printMensaje();
        System.out.println("Soy un gato que maulla");
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String 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 esta 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 que 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");
}

Espero que este tutorial de herencia y polimorfismo en java te sirva, sigue revisando el curso para seguir aprendiendo.

Aquí tengo un articulo completo sobre el uso de la palabra clave SUPER en JAVA

Estaremos encantados de escuchar lo que piensas

Deje una respuesta

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies
El inicio de sesión/registro está temporalmente inhabilitado