Classe Titulo: java Copiar Editar public class Titulo { private String nome; private int duracaoEmMinutos;
public Titulo(String nome, int duracaoEmMinutos) {
this.nome = nome;
this.duracaoEmMinutos = duracaoEmMinutos;
}
public String getNome() {
return nome;
}
public int getDuracaoEmMinutos() {
return duracaoEmMinutos;
}
public void exibeFichaTecnica() {
System.out.println("Nome: " + nome);
System.out.println("Duração: " + duracaoEmMinutos + " minutos");
}
} Classe Serie (herda de Titulo): java Copiar Editar public class Serie extends Titulo { private int numeroDeEpisodios;
public Serie(String nome, int duracaoEmMinutos, int numeroDeEpisodios) {
super(nome, duracaoEmMinutos); // Chama o construtor da classe pai (Titulo)
this.numeroDeEpisodios = numeroDeEpisodios;
}
@Override
public void exibeFichaTecnica() {
super.exibeFichaTecnica(); // Exibe a ficha técnica da classe pai
System.out.println("Número de Episódios: " + numeroDeEpisodios);
}
public int getNumeroDeEpisodios() {
return numeroDeEpisodios;
}
} Classe CalculadoraDeTempo (polimorfismo): java Copiar Editar public class CalculadoraDeTempo {
public int calculaTempoTotal(Titulo[] titulos) {
int tempoTotal = 0;
// Aqui, demonstramos o polimorfismo, pois podemos passar objetos Titulo ou Serie
for (Titulo titulo : titulos) {
tempoTotal += titulo.getDuracaoEmMinutos();
}
return tempoTotal;
}
} Classe Main (para testar as classes): java Copiar Editar public class Main { public static void main(String[] args) { // Criando instâncias de Titulo e Serie Titulo filme = new Titulo("Filme Genérico", 120); Serie serie = new Serie("Série Exemplar", 40, 10);
// Exibindo informações dos objetos
filme.exibeFichaTecnica();
System.out.println("-------------------");
serie.exibeFichaTecnica();
// Calculando o tempo total utilizando polimorfismo
Titulo[] titulos = {filme, serie};
CalculadoraDeTempo calculadora = new CalculadoraDeTempo();
int tempoTotal = calculadora.calculaTempoTotal(titulos);
System.out.println("Tempo total de todos os títulos: " + tempoTotal + " minutos");
}
} Explicação do código: Herança:
A classe Serie herda da classe Titulo, pois uma série é um tipo específico de título. Ou seja, a Serie herda os atributos nome e duracaoEmMinutos da classe Titulo, e ela pode adicionar um novo atributo numeroDeEpisodios. Além disso, a classe Serie sobrescreve o método exibeFichaTecnica da classe Titulo para incluir informações sobre o número de episódios.
Polimorfismo:
O método calculaTempoTotal da classe CalculadoraDeTempo recebe um array de objetos Titulo. Mesmo que o array contenha objetos da classe Titulo e da classe Serie, o método pode acessar o getDuracaoEmMinutos() de qualquer objeto, seja ele um Titulo ou uma Serie. Isso ocorre porque a classe Serie herda de Titulo e garante que todos os objetos da hierarquia de herança (como Serie) terão o método getDuracaoEmMinutos.