1
resposta

Faça como eu fiz: foreach

import screenmatch.modelos.Filme;
import screenmatch.modelos.Serie;
import screenmatch.modelos.Tipo;

import java.util.ArrayList;

public class Principal {
    public static void main(String[] args) {
        Filme filme1 = new Filme("Interestelar", 2015, "Um grupo de exploradores viaja através de um buraco de minhoca em busca de um novo lar para a humanidade.", true,8.7, "Christopher Nolan",169);
        Filme filme2 = new Filme("Tropa de Elite", 2007, "Um capitão do BOPE tenta combater o tráfico de drogas no Rio de Janeiro.", true, 8.1, "José Padilha",115 );
        Serie serie1 = new Serie("Breaking Bad", 2008, "Um professor de química se torna um fabricante de metanfetamina após ser diagnosticado com câncer.", true, 9.5, 0, 5, 13);

        Filme f1 = new Filme("Cidade de Deus", 2002, 8.7);
        Filme f2 = new Filme("De Volta Para o Futuro" ,1985, 10.0);
        ArrayList <Tipo> listaFilmes = new ArrayList<>();

        listaFilmes.add(filme1);
        listaFilmes.add(filme2);
        listaFilmes.add(f1);
        listaFilmes.add(f2);
        listaFilmes.add(serie1);

//        System.out.println(listaFilmes);

        for (Tipo mostragem: listaFilmes) {
            System.out.println(mostragem);
            mostragem.mostrarAvaliacao();
        }
    }
}

Fiz dessa forma sem o instanceod, pois defini o método mostrar avaliação em tipo ao invés de filme.

public void mostrarAvaliacao(){
        if(getAvaliacao() == 10){
            System.out.println("    Nota Máxima, top!!!");
        }
    }

A saída foi essa:

Filme: Interestelar - 2015
Filme: Tropa de Elite - 2007
Filme: Cidade de Deus - 2002
Filme: De Volta Para o Futuro - 1985
    Nota Máxima, top!!!
Série: Breaking Bad - 2008
    Nota Máxima, top!!!

Process finished with exit code 0
1 resposta

Oi, Paulo! Tudo bem com você?

Obrigada por compartilhar seu código com a comunidade Alura.

Seu uso da herança para evitar o uso de instanceof foi muito bem pensado. Ao mover o método mostrarAvaliacao() para a classe Tipo, você aproveitou o polimorfismo de forma inteligente, permitindo que filmes e séries compartilhem esse comportamento sem precisar de verificações de tipo.

Uma dica: use a sobrescrita de métodos (@Override) caso queira personalizar o comportamento de avaliação para Filme e Serie separadamente. Veja um exemplo:


public class Filme extends Tipo {
    @Override
    public void mostrarAvaliacao() {
        if(getAvaliacao() == 10){
            System.out.println("    Filme excelente!");
        }
    }
}

Esse código redefine o método para Filme, permitindo mensagens diferentes conforme o tipo. Assim, você pode manter a generalidade em Tipo e a especificidade nas subclasses.

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