1
resposta

Faça como eu fiz: declarando construtores [Construindo Objetos]

Segue a resolução do exercício proposto.
Classe Titulo:

package br.com.alura.screenmatch.modelos;

import br.com.alura.screenmatch.calculos.Classificavel;

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

    public Titulo(String nome, int anoDeLancamento) {
        this.nome = nome;
        this.anoDeLancamento = anoDeLancamento;
    }

    public String getNome() {
        return nome;
    }

    public int getAnoDeLancamento() {
        return anoDeLancamento;
    }

    public int getDuracaoEmMinutos() {
        return duracaoEmMinutos;
    }

    public boolean isIncluidoNoPlano() {
        return incluidoNoPlano;
    }

    public int getTotalDeAvaliacoes() {
        return totalDeAvaliacoes;
    }

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

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

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

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

    public double pegaMedia() {
        if (totalDeAvaliacoes != 0) {
            return somaDasAvaliacoes/totalDeAvaliacoes;
        } else {
            return 0.0;
        }
    }

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

    @Override
    public String toString() {
        return "Nome Título: " + getNome() +
                ", Ano de Lançamento: " + getAnoDeLancamento() +
                ", Duração em minutos: " + getDuracaoEmMinutos() +
                ", Avaliação: " + pegaMedia();
    }
}

Classe Filme:

package br.com.alura.screenmatch.modelos;

import br.com.alura.screenmatch.calculos.Classificavel;

public class Filme extends Titulo implements Classificavel {
    private String diretor;

    public Filme(String nome, int anoDeLancamento) {
        super(nome, anoDeLancamento);
    }
    public Filme(String nome, String diretor, int anoDeLancamento, int duracaoEmMinutos) {
        super(nome, anoDeLancamento);
        this.setDuracaoEmMinutos(duracaoEmMinutos);
        this.setDiretor(diretor);
    }

    public String getDiretor() {
        return diretor;
    }

    public void setDiretor(String diretor) {
        this.diretor = diretor;
    }

    @Override
    public int getClassificacao() {
        return (int) pegaMedia()/2;
    }

    @Override
    public String toString() {
        return  "\n[Filme: " + this.getNome() + "(" + this.getAnoDeLancamento() + "), " +
                "diretor: " + this.diretor + ", duração: " + this.getDuracaoEmMinutos() + " minutos]";
    }
}

Classe Main:

import br.com.alura.screenmatch.calculos.CalculadoraDeTempo;
import br.com.alura.screenmatch.calculos.FiltroRecomendacao;
import br.com.alura.screenmatch.modelos.Episodio;
import br.com.alura.screenmatch.modelos.Filme;
import br.com.alura.screenmatch.modelos.Serie;

import java.util.ArrayList;


public class Main {
    public static void main(String[] args) {

        System.out.println("ArrayList de Filmes:");

        Filme filme1 = new Filme("Forest Gump","Robert Zemeckis", 1994, 142);

        Filme filme2 = new Filme("Ant Z", "Eric Darnell, Lawrence Guterman, Tim Johnson", 1998,83);

        Filme filme3 = new Filme("O Nome da Rosa", "Jean-Jacques Annaud", 1986, 130);

        ArrayList<Filme> filmes = new ArrayList<>();
        filmes.add(filme1);
        filmes.add(filme2);
        filmes.add(filme3);
        System.out.println("Filmes: " + filmes);

        }
    }

Output:

ArrayList de Filmes:
Filmes: [
[Filme: Forest Gump (1994), diretor: Robert Zemeckis, duração: 142 minutos], 
[Filme: Ant Z (1998), diretor: Eric Darnell, Lawrence Guterman, Tim Johnson, duração: 83 minutos], 
[Filme: O Nome da Rosa (1986), diretor: Jean-Jacques Annaud, duração: 130 minutos]]

Process finished with exit code 0
1 resposta

Olá, Raoni, como vai?

O uso de construtores nas classes base e derivada está coerente, assim como a chamada ao construtor da superclasse com super. A criação dos objetos na classe Main demonstra que os construtores estão sendo utilizados corretamente e o resultado impresso confirma esse comportamento.

Obrigado por compartilhar sua solução e fique à vontade para continuar trazendo suas implementações e dúvidas no fórum, que está sempre à disposição.

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