La herencia y el polimorfismo son conceptos fundamentales en la programación orientada a objetos (POO) y son muy utilizados en Java. Estos conceptos permiten crear jerarquías de clases y trabajar con colecciones de objetos de manera flexible. A continuación, se presentan una serie de ejercicios que te ayudarán a mejorar tus habilidades en el uso de herencia, polimorfismo y la clase ArrayList en Java.
Ejercicio 1: Herencia Básica
Crea una clase Animal con un método hacerSonido(). Luego, crea dos clases que hereden de Animal: Perro y Gato, y sobrescribe el método hacerSonido() en cada una de ellas para imprimir sonidos específicos de cada animal.
import java.util.ArrayList;
class Animal {
public void hacerSonido() {
System.out.println("El animal hace un sonido");
}
}
class Perro extends Animal {
@Override
public void hacerSonido() {
System.out.println("El perro ladra: ¡Guau guau!");
}
}
class Gato extends Animal {
@Override
public void hacerSonido() {
System.out.println("El gato maúlla: ¡Miau miau!");
}
}
public class TestAnimales {
public static void main(String[] args) {
ArrayList<Animal> animales = new ArrayList<>();
animales.add(new Perro());
animales.add(new Gato());
for (Animal animal : animales) {
animal.hacerSonido();
}
}
}
Ejercicio 2: Herencia y Polimorfismo con ArrayList
Crea una clase Empleado con atributos nombre y salario, y un método calcularSalario(). Luego, crea dos clases que hereden de Empleado: EmpleadoFijo y EmpleadoPorHoras. EmpleadoFijo tendrá un salario fijo, y EmpleadoPorHoras tendrá un salario basado en las horas trabajadas y la tarifa por hora. Usa un ArrayList para almacenar varios empleados y calcula el salario total de todos los empleados.
import java.util.ArrayList;
abstract class Empleado {
protected String nombre;
protected double salario;
public Empleado(String nombre) {
this.nombre = nombre;
}
public abstract double calcularSalario();
}
class EmpleadoFijo extends Empleado {
private double salarioMensual;
public EmpleadoFijo(String nombre, double salarioMensual) {
super(nombre);
this.salarioMensual = salarioMensual;
}
@Override
public double calcularSalario() {
return salarioMensual;
}
}
class EmpleadoPorHoras extends Empleado {
private int horasTrabajadas;
private double tarifaPorHora;
public EmpleadoPorHoras(String nombre, int horasTrabajadas, double tarifaPorHora) {
super(nombre);
this.horasTrabajadas = horasTrabajadas;
this.tarifaPorHora = tarifaPorHora;
}
@Override
public double calcularSalario() {
return horasTrabajadas * tarifaPorHora;
}
}
public class TestEmpleados {
public static void main(String[] args) {
ArrayList<Empleado> empleados = new ArrayList<>();
empleados.add(new EmpleadoFijo("Carlos", 3000));
empleados.add(new EmpleadoPorHoras("Laura", 160, 15));
double salarioTotal = 0;
for (Empleado empleado : empleados) {
salarioTotal += empleado.calcularSalario();
}
System.out.println("El salario total de todos los empleados es: " + salarioTotal);
}
}
Ejercicio 3: Herencia con Métodos Adicionales
Crea una clase Vehiculo con atributos marca y modelo, y un método arrancar(). Luego, crea dos clases que hereden de Vehiculo: Coche y Motocicleta. Coche tendrá un método adicional abrirMaletero(), y Motocicleta tendrá un método adicional hacerCaballito(). Usa un ArrayList para almacenar varios vehículos y demuestra el uso de herencia y polimorfismo.
import java.util.ArrayList;
class Vehiculo {
protected String marca;
protected String modelo;
public Vehiculo(String marca, String modelo) {
this.marca = marca;
this.modelo = modelo;
}
public void arrancar() {
System.out.println("El vehículo " + marca + " " + modelo + " está arrancando.");
}
}
class Coche extends Vehiculo {
public Coche(String marca, String modelo) {
super(marca, modelo);
}
public void abrirMaletero() {
System.out.println("El coche " + marca + " " + modelo + " está abriendo el maletero.");
}
}
class Motocicleta extends Vehiculo {
public Motocicleta(String marca, String modelo) {
super(marca, modelo);
}
public void hacerCaballito() {
System.out.println("La motocicleta " + marca + " " + modelo + " está haciendo un caballito.");
}
}
public class TestVehiculos {
public static void main(String[] args) {
ArrayList<Vehiculo> vehiculos = new ArrayList<>();
vehiculos.add(new Coche("Toyota", "Corolla"));
vehiculos.add(new Motocicleta("Yamaha", "R1"));
for (Vehiculo vehiculo : vehiculos) {
vehiculo.arrancar();
if (vehiculo instanceof Coche) {
((Coche) vehiculo).abrirMaletero();
} else if (vehiculo instanceof Motocicleta) {
((Motocicleta) vehiculo).hacerCaballito();
}
}
}
}
Ejercicio 4: Biblioteca con Herencia y Polimorfismo
Crea una clase Publicacion con atributos titulo y autor, y un método mostrarInformacion(). Luego, crea dos clases que hereden de Publicacion: Libro y Revista. Libro tendrá un atributo adicional numeroPaginas, y Revista tendrá un atributo adicional numeroEdicion. Usa un ArrayList para almacenar varias publicaciones y demuestra el uso de herencia y polimorfismo.
import java.util.ArrayList;
class Publicacion {
protected String titulo;
protected String autor;
public Publicacion(String titulo, String autor) {
this.titulo = titulo;
this.autor = autor;
}
public void mostrarInformacion() {
System.out.println("Título: " + titulo + ", Autor: " + autor);
}
}
class Libro extends Publicacion {
private int numeroPaginas;
public Libro(String titulo, String autor, int numeroPaginas) {
super(titulo, autor);
this.numeroPaginas = numeroPaginas;
}
@Override
public void mostrarInformacion() {
super.mostrarInformacion();
System.out.println("Número de páginas: " + numeroPaginas);
}
}
class Revista extends Publicacion {
private int numeroEdicion;
public Revista(String titulo, String autor, int numeroEdicion) {
super(titulo, autor);
this.numeroEdicion = numeroEdicion;
}
@Override
public void mostrarInformacion() {
super.mostrarInformacion();
System.out.println("Número de edición: " + numeroEdicion);
}
}
public class TestPublicaciones {
public static void main(String[] args) {
ArrayList<Publicacion> publicaciones = new ArrayList<>();
publicaciones.add(new Libro("El Quijote", "Miguel de Cervantes", 400));
publicaciones.add(new Revista("National Geographic", "Varios", 2023));
for (Publicacion publicacion : publicaciones) {
publicacion.mostrarInformacion();
}
}
}
Conclusión
Estos ejercicios te proporcionarán una base sólida para trabajar con herencia y polimorfismo en Java, utilizando la clase ArrayList para manejar colecciones de objetos. Practicar estos conceptos es esencial para desarrollar tus habilidades de programación orientada a objetos y te permitirá abordar problemas más complejos en el futuro. ¡Sigue practicando y explorando más sobre Java para convertirte en un programador más competente!
¿QUÉ TE HA PARECIDO EL ARTÍCULO? Danos tu opinión al final de la página.
Deja tu comentario y ayúdanos a crecer.
¡SÍGUENOS EN TUS REDES FAVORITAS!
AYUDANOS A CRECER Y QUE LLEGUEMOS A TODAS LAS PERSONAS QUE NOS NECESITANA. SÍGUENOS EN TUS REDES.
Entra AQUÍ y elíge donde seguirnos.

NUESTRAS ÚLTIMAS PUBLICACIONES
- Propuestas de actividades avanzadas con XML, DTD, XPath y XSLT
- Apuntes extensos de XML y XSLT
- El momento IDEAL para impulsar tu FORMACIÓN y alcanzar tus Metas Académicas: LAS NAVIDADES.

- 20 ejercicios de funciones avanzadas en Python (al estilo de Ackermann)
- Cómo guardar una página web completa en MySQL con PHP (urlencode, BLOB y otras técnicas)
- 60 ejercicios de funciones recursivas en Python para la carrera de Informática
- SIMULACRO 2 – FP Programación de Videojuegos
- Simulacro de examen – FP Programación de Videojuegos
- ALERTA METEOROLÓGICA

ELIGE TU RED FAVORITA Y SÍGUENOS.
AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.
Contenido restringido





































































































































































































































































INFORMACIÓN SOBRE 







Comments are closed