Titulo.java
public class Titulo {
private String nombre;
private int fechaLanzamiento;
private boolean incluidoEnElPlan;
private double sumaDeLasEvaluaciones;
private int totalDeEvaluaciones;
private int duracionEnMinutos; // Duración común a todos los títulos
// Constructor (opcional pero recomendable)
public Titulo(String nombre, int duracionEnMinutos) {
this.nombre = nombre;
this.duracionEnMinutos = duracionEnMinutos;
}
// Métodos (Comportamiento)
public void muestraFichaTecnica() {
System.out.println("Nombre del título: " + nombre);
System.out.println("Año de lanzamiento: " + fechaLanzamiento);
System.out.println("Duración: " + duracionEnMinutos + " minutos");
}
// Getters y Setters
public int getDuracionEnMinutos() {
return duracionEnMinutos;
}
public void setDuracionEnMinutos(int duracionEnMinutos) {
this.duracionEnMinutos = duracionEnMinutos;
}
// ... otros getters/setters y métodos de evaluación
}
Serie.java
public class Serie extends Titulo {
private int temporadas;
private int episodiosPorTemporada;
private int minutosPorEpisodio;
// Constructor que llama al constructor del padre (Título)
public Serie(String nombre, int duracionEnMinutos) {
super(nombre, duracionEnMinutos); // Llama al constructor de Título
}
// Método especializado
public void configuraSerie(int temporadas, int episodios, int minutos) {
this.temporadas = temporadas;
this.episodiosPorTemporada = episodios;
this.minutosPorEpisodio = minutos;
// La duración total de la serie se calcula y se establece en el atributo heredado
int duracionTotal = temporadas * episodios * minutos;
super.setDuracionEnMinutos(duracionTotal);
}
// Sobrescribir (Polimorfismo por Sobreescritura)
@Override
public int getDuracionEnMinutos() {
// La serie devuelve la duración total calculada
return super.getDuracionEnMinutos();
}
// Getters y Setters específicos de Serie
// ...
}
CalculadoraDeTiempo.java
public class CalculadoraDeTiempo {
private int tiempoTotal;
public int getTiempoTotal() {
return tiempoTotal;
}
/**
* Aplica Polimorfismo. Recibe un objeto de tipo Titulo (o cualquier subtipo).
* @param titulo Objeto Titulo, Serie, o Pelicula.
*/
public void incluye(Titulo titulo) {
// Java llama al método getDuracionEnMinutos() de la clase REAL del objeto.
// Si es Titulo, usa Titulo.getDuracionEnMinutos().
// Si es Serie, usa Serie.getDuracionEnMinutos().
this.tiempoTotal += titulo.getDuracionEnMinutos();
}
}
Principal.java
public class Principal {
public static void main(String[] args) {
// 1. Crear Títulos
Titulo pelicula1 = new Titulo("Avatar", 180);
Titulo pelicula2 = new Titulo("Dune", 155);
Serie serie1 = new Serie("The Witcher", 0); // Duración inicial 0
serie1.configuraSerie(3, 8, 50); // 3 temporadas, 8 eps, 50 min/ep -> 1200 minutos
// 2. Usar la Calculadora (Polimorfismo en acción)
CalculadoraDeTiempo calculadora = new CalculadoraDeTiempo();
// Incluye la película (usa Titulo.getDuracionEnMinutos())
calculadora.incluye(pelicula1);
// Incluye la otra película
calculadora.incluye(pelicula2);
// Incluye la serie (usa Serie.getDuracionEnMinutos() que devuelve la duración total calculada)
calculadora.incluye(serie1);
// 3. Resultado
System.out.println("Duración total de títulos vistos: " + calculadora.getTiempoTotal() + " minutos.");
// Resultado esperado: 180 + 155 + 1200 = 1535 minutos
}
}