Ejercicio Resuelto Herencia en Java


Codifica la siguiente jerarquía de clases java representada por este diagrama UML:


La clase base es la clase Empleado. Esta clase contiene:
Un atributo privado nombre de tipo String que heredan el resto de clases. 
Un constructor por defecto.
Un constructor con parámetros que inicializa el nombre con el String que recibe.
Método set y get para el atributo nombre.
Un método toString() que devuelve el String: "Empleado " + nombre.

El resto de clases solo deben sobrescribir el método toString() en cada una de ellas y declarar el constructor adecuado de forma que cuando la ejecución de las siguientes instrucciones:

Empleado E1 = new Empleado("Rafa");
Directivo D1 = new Directivo("Mario");
Operario OP1 = new Operario("Alfonso");
Oficial OF1 = new Oficial("Luis");
Tecnico T1 = new Tecnico("Pablo");
System.out.println(E1);
System.out.println(D1);
System.out.println(OP1);
System.out.println(OF1);
System.out.println(T1);
Den como resultado:
Empleado Rafa
Empleado Mario -> Directivo
Empleado Alfonso -> Operario
Empleado Luis -> Operario -> Oficial
Empleado Pablo -> Operario -> Tecnico
Solución:
Primero escribimos el código de la clase Empleado que es la Clase Base:
//Clase Empleado. Clase Base de la jerarquía
public class Empleado {
    private String nombre;

    //constructor por defecto
    public Empleado() {
    }

    //constructor con un parámetro
    public Empleado(String nombre) {
        this.nombre = nombre;
        System.out.println("Constructor de Empleado " + nombre);
    }
   
    //métodos get y set
    public String getNombre() {
        return nombre;
    }
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    //método toString()
    //devuelve un String formado por la palabra “Empleado” y el nombre de empleado
    @Override
    public String toString() {
        return "Empleado " + nombre;
    }
}
A continuación escribimos el código de las Clases Derivadas.
La primera que vamos a crear es la clase Operario que hereda de forma directa de la clase Empleado. Recuerda que en java la herencia se expresa mediante la palabra extends: Operario extends Empleado indica que la clase Operario deriva o hereda de la clase Empleado.
La clase Operario hereda de Empleado el atributo nombre, los métodos get/set y el método toString(). El constructor de la clase recibe el nombre del empleado y lo pasa al constructor de la clase Base mediante la instrucción super(nombre).
En esta clase se modifica (override) el método toString() heredado de la clase base para que muestre un mensaje como pide el ejercicio.
//Clase Operario. Clase derivada de la clase Empleado
public class Operario extends Empleado{

    //constructor con un parámetro
    public Operario(String nombre) {
        super(nombre);
        System.out.println("Constructor de Operario");
    }

    //constructor por defecto
    public Operario() {
    }

    //modificación del método toString() para mostrar el mensaje adecuado
    @Override
    public String toString() {
        return super.toString() + " -> Operario";
    }
   
}

Ahora escribimos el código de la clase Oficial que hereda de la clase Operario.
La clase Oficial hereda de Operario el atributo nombre, los métodos get/set y el método toString().
El constructor de la clase recibe el nombre del empleado y lo pasa al constructor de su clase Base, en este clase la clase Operario, mediante la instrucción super(nombre).
En esta clase también se modifica el método toString() heredado de su clase base para que muestre un mensaje como pide el ejercicio.
//Clase Oficial. Clase derivada de la clase Operario
public class Oficial extends Operario{

    public Oficial() {
    }

    public Oficial(String nombre) {
        super(nombre);
        System.out.println("Constructor de Oficial");
    }
   
    @Override
    public String toString() {
        return super.toString() + " -> Oficial";
    }
}
El código Java del resto de las clases es similar a estos.
//Clase Directivo. Clase derivada de la clase Empleado
public class Directivo extends Empleado{

    public Directivo() {
    }
   
    public Directivo(String nombre) {
        super(nombre);
        System.out.println("Constructor de Directivo");
    }
   
    @Override
    public String toString() {
        return super.toString() + " -> Directivo";
    }
}

//Clase Tecnico. Clase derivada de la clase Operario
public class Tecnico extends Operario{

    public Tecnico() {
    }

    public Tecnico(String nombre) {
        super(nombre);
        System.out.println("Constructor de Tecnico");
    }
   
    @Override
    public String toString() {
        return super.toString() + " -> Tecnico";
    }
}

4 comentarios:

  1. alguien que me ayude con estos ejercicios:

    9.5 Dibuje una jerarquía de herencia para los estudiantes en una universidad, de manera similar a la jerarquía que se muestra en la figura 9.2. Use a Estudi ante como la superclase de la jerarquía, y después extienda Estudi ante con las clases Estudi anteNoCraduado y EstudianteCraduado. Siga extendiendo la jerarquía con el mayor número de niveles que sea posible. Por ejemplo, EstudiantePrimerAnio, EstudianteSegundoAnio, EstudianteTercerAnio y Estudiante- CuartoAnio podrían extender a EstudianteNoCraduado, y EstudianteDoctorado y EstudianteMaestria podrían ser subclases de EstudianteCraduado. Después de dibujar la jerarquía, hable sobre las relaciones que existen entre las clases. [Nota: no necesita escribir código para este ejercicio].

    9.8 Escriba una jerarquía de herencia para las clases Cuadrilátero, Trapezoide, Paral el ogramo, Rectángulo y Cuadrado. Use Cuadri latero como la superclase de la jerarquía. Cree y use una clase Punto para representar los puntos en cada figura. Agregue todos los niveles que sea posible a la jerarquía. Especifique las variables de instancia y los métodos para cada clase. Las variables de instancia private de Cuadri 1 atero deben ser los pares de coordenadas x-y para los cuatro puntos finales del Cuadri latero. Escriba un programa que cree instancias de objetos de sus clases, y que imprima el área de cada objeto (excepto Cuad ri 1 atero).

    ResponderEliminar
  2. Crea en java el código de un ejemplo de herencia con una súper
    clase y dos sub clases. Ejemplo: Persona, Cliente, Vendedor
    Me podran ayudar por favor..!!

    ResponderEliminar
    Respuestas
    1. La próxima vez pon la duda o plantea la cuestión de otra forma, ejemplo:
      -Me pueden hacer la siguiente tarea?

      ***Clase Persona***
      public abstract class Persona {
      private String nombre;
      private int edad;

      public Persona(String nombre, int edad) {
      setNombre(nombre);
      setEdad(edad);
      }

      public String getNombre() {
      return nombre;
      }

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

      public int getEdad() {
      return edad;
      }

      public void setEdad(int edad) {
      this.edad = edad;
      }

      public abstract void mostrarNombre();
      public abstract void mostrarEdad();

      @Override
      public String toString() {
      return "NOMBRE: "+getNombre()+"\tEDAD: "+getEdad();
      }
      }

      ***Clase Cliente***

      public class Cliente extends Persona{

      public Cliente(String nombre, int edad) {
      super(nombre, edad);
      }

      @Override
      public void mostrarNombre() {
      System.out.println(getNombre());
      }

      @Override
      public void mostrarEdad() {
      System.out.println(getEdad());
      }

      }

      ***Clase Vendedor***

      public class Vendedor extends Persona{

      public Vendedor(String nombre, int edad) {
      super(nombre, edad);
      }

      @Override
      public void mostrarNombre() {
      System.out.println(getNombre());
      }

      @Override
      public void mostrarEdad() {
      System.out.println(getEdad());
      }

      }

      Eliminar
  3. Crea en java el código de un ejemplo de herencia con una súper
    clase y dos sub clases. Ejemplo: Persona, Cliente, Vendedor
    Me podran ayudar por favor..!

    ResponderEliminar