2
respostas

[Projeto] Herança e polimorfismo

package br.com.alura.screenmacth.modelos;
import br.com.alura.screenmacth.calculos.CalculadoraDeTempo;

public class Main {
    public static void main(String[] args) {
        Filme favorito = new Filme();
        favorito.setNome("The Martrix");
        favorito.setAnoDeLancamento(1999);
        favorito.setDuracaoEmMinutos(135);
        favorito.setIncluidoNoPlano(true);

        Filme outro = new Filme();
        outro.setNome("John Wick");
        outro.setAnoDeLancamento(2014);
        outro.setDuracaoEmMinutos(100);
        outro.setIncluidoNoPlano(true);

        Serie serie = new Serie();
        serie.setNome("La Casa de Papel");
        serie.setAnoDeLancamento(2017);
        serie.setIncluidoNoPlano(true);
        serie.setAtiva(true);
        serie.setTemporadas(5);
        serie.setEpisodiosPorTemporada(10);
        serie.setMinutosPorEpisodios(45);

        CalculadoraDeTempo calculadora = new CalculadoraDeTempo();
        calculadora.inclui(favorito);
        calculadora.inclui(outro);
        calculadora.inclui(serie);

        System.out.println("Tempo total: " +calculadora.getTempoTotal());
    }
}
package br.com.alura.screenmacth.modelos;

public class Titulo {
    private String nome;
    private int anoDeLancamento;
    private int duracaoEmMinutos;
    private boolean incluidoNoPlano;
    private double somaDasAvaliacoes;
    private int totalDeAvaliacoes;

    //metodos especiais
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public int getAnoDeLancamento() {
        return anoDeLancamento;
    }

    public void setAnoDeLancamento(int anoDeLancamento) {
        this.anoDeLancamento = anoDeLancamento;
    }

    public int getDuracaoEmMinutos() {
        return duracaoEmMinutos;
    }

    public void setDuracaoEmMinutos(int duracaoEmMinutos) {
        this.duracaoEmMinutos = duracaoEmMinutos;
    }

    public boolean isIncluidoNoPlano() {
        return incluidoNoPlano;
    }

    public void setIncluidoNoPlano(boolean incluidoNoPlano) {
        this.incluidoNoPlano = incluidoNoPlano;
    }

    public int getTotalDeAvaliacoes() {
        return totalDeAvaliacoes;
    }

    //metodos
    void exibeFichaTecnica(){
        System.out.println("Nome do filme: " + nome);
        System.out.println("Data de lançamento: " + anoDeLancamento);
        System.out.println("Duração do filme: " + duracaoEmMinutos + "m.");
        System.out.println("incluído no plano: " + incluidoNoPlano);
    }

    void avalia(double nota){
        somaDasAvaliacoes += nota;
        totalDeAvaliacoes++;
    }

    double pegaMedia(){
        return somaDasAvaliacoes / totalDeAvaliacoes;
    }
}
package br.com.alura.screenmacth.modelos;

public class Filme extends Titulo{

    private String diretor;

    public String getDiretor() {
        return diretor;
    }

    public void setDiretor(String diretor) {
        this.diretor = diretor;
    }
}
package br.com.alura.screenmacth.modelos;
public class Serie extends Titulo{
    private int temporadas;
    private int minutosPorEpisodios;
    private int episodiosPorTemporada;
    private boolean ativa;

    public int getTemporadas() {
        return temporadas;
    }

    public void setTemporadas(int temporadas) {
        this.temporadas = temporadas;
    }

    public int getMinutosPorEpisodios() {
        return minutosPorEpisodios;
    }

    public void setMinutosPorEpisodios(int minutosPorEpisodios) {
        this.minutosPorEpisodios = minutosPorEpisodios;
    }

    public int getEpisodiosPorTemporada() {
        return episodiosPorTemporada;
    }

    public void setEpisodiosPorTemporada(int episodiosPorTemporada) {
        this.episodiosPorTemporada = episodiosPorTemporada;
    }

    public boolean isAtiva() {
        return ativa;
    }

    public void setAtiva(boolean ativa) {
        this.ativa = ativa;
    }

    @Override
    public int getDuracaoEmMinutos() {
        return temporadas * episodiosPorTemporada * minutosPorEpisodios;
    }
}
2 respostas

sssss

Oi, Gabriel! Como vai?

Agradeço por compartilhar.

Muito interessante como você aplicou herança e polimorfismo, principalmente no uso do @Override na classe Serie. Isso mostra bem como o comportamento pode mudar mantendo a mesma interface (getDuracaoEmMinutos()), o que é um ponto importante da orientação a objetos.

Você pode usar polimorfismo com listas, permitindo trabalhar com vários objetos do tipo pai (Titulo) de forma mais flexível.


ArrayList<Titulo> lista = new ArrayList<>();

lista.add(new Filme());
lista.add(new Serie());

for (Titulo t : lista) {
    System.out.println(t.getDuracaoEmMinutos());
}

Esse código cria uma lista de Titulo e percorre exibindo a duração, aproveitando o polimorfismo em tempo de execução.

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!