Código da classe Main:
package br.com.alura.desafio.streamingmusica;
import br.com.alura.desafio.streamingmusica.modelos.Musicas; import br.com.alura.desafio.streamingmusica.modelos.Podcasts;
public class Principal { public static void main(String[] args) {
    Musicas musica1 = new Musicas();
    musica1.setDuracao(6.09);
    musica1.setTitulo("Infinite Dreams");
    musica1.setAlbum("Seventh Son of a Seventh Son");
    musica1.setArtista("Iron Maiden");
    musica1.setGenero("Metal");
    musica1.linhaOrganiza();
    musica1.exibeDescricao();
    musica1.reproduz();
    musica1.curte();
    musica1.linhaOrganiza();
    Podcasts podcast1 = new Podcasts();
    podcast1.setEpisodio(32);
    podcast1.setDuracao(30.39);
    podcast1.setTitulo("Carreira e Dia da Programação");
    podcast1.setHost("Paulo Silveira");
    podcast1.exibeDescricao();
    podcast1.curte();
    musica1.linhaOrganiza();
}
}
Código da Superclasse:
package br.com.alura.desafio.streamingmusica;
public class Audio { //Atributos. private double duracao; private String titulo;
//Getters e Setters
public String getTitulo() {
    return titulo;
}
public void setTitulo(String titulo) {
    this.titulo = titulo;
}
public double getDuracao() {
    return duracao;
}
public void setDuracao(double duracao) {
    this.duracao = duracao;
}
//Métodos.
public void curte() {
    System.out.println("Você curtiu este som!");
}
public void reproduz() {
    System.out.println("Reproduzindo " + "\"" + titulo + "\"" + " ♫");
}
public void linhaOrganiza() {
    System.out.println("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
}
}
Código da Subclasse 1:
package br.com.alura.desafio.streamingmusica.modelos;
import br.com.alura.desafio.streamingmusica.Audio; import br.com.alura.desafio.streamingmusica.interfaces.Texto;
public class Musicas extends Audio implements Texto { //Atributos. String album; String artista; String genero;
//Getters e Setters.
public String getAlbum() {
    return album;
}
public void setAlbum(String album) {
    this.album = album;
}
public String getArtista() {
    return artista;
}
public void setArtista(String artista) {
    this.artista = artista;
}
public String getGenero() {
    return genero;
}
public void setGenero(String genero) {
    this.genero = genero;
}
//Métodos. @Override public void exibeDescricao() { String descricaoMusicas = """ Título: %s Artista: %s Álbum: %s Duração: %.2f Gênero: %s """.formatted(getTitulo(), artista, album, getDuracao(), genero); System.out.println(descricaoMusicas); } }
Código da Subclasse 2:
package br.com.alura.desafio.streamingmusica.modelos;
import br.com.alura.desafio.streamingmusica.Audio; import br.com.alura.desafio.streamingmusica.interfaces.Texto;
public class Podcasts extends Audio implements Texto { //Atributos. String host; int episodio;
//Getters e Setters. public void setHost(String host) { this.host = host; }
public void setEpisodio(int episodio) {
    this.episodio = episodio;
}
//Métodos.
@Override
public void exibeDescricao() {
    String descricaoPodcast = """
            ~ Hipsters Ponto Tech
            Episódio #%d
            %s
            Host: %s
            Duração: %.2f
            """.formatted(episodio, getTitulo(), host, getDuracao());
    System.out.println(descricaoPodcast);
}
public void curte() {
    System.out.println("Você curtiu este podcast!");
}
@Override
public void reproduz() {
    System.out.println("Reproduzindo " +  "\"" + getTitulo() + "\"" + " ▶");
}
}
Código da Interface:
package br.com.alura.desafio.streamingmusica.interfaces;
public interface Texto { void exibeDescricao(); }