Essa de pegar caractéres da string pra formar o "código" é uma baita pegadinha. Em JavaScript usa .slice eu acho, em Java foi alguns minutos lendo documentação.
Main
public class MainLivraria {
public static void main(String[] args) {
Livro livro = new Livro("O Guia do Mochileiro das Galáxias", 1979, "Douglas Adams");
Revista revista = new Revista("National Geographic", 2023, 245);
Ebook ebook = new Ebook("Clean Code",2008 ,"PDF");
livro.exibirCodigo();
revista.exibirCodigo();
ebook.exibirCodigo();
}
}
Mídia
public class Midia {
protected String titulo;
protected int anoPublicacao;
public Midia(String titulo, int anoPublicacao) {
this.titulo = titulo;
this.anoPublicacao = anoPublicacao;
}
public String getTitulo() {
return titulo;
}
public int getAnoPublicacao() {
return anoPublicacao;
}
public void exibirCodigo() {
}
}
Livro
public class Livro extends Midia {
private String autor;
public Livro(String titulo, int anoPublicacao, String autor) {
super(titulo, anoPublicacao);
this.autor = autor;
}
@Override
public void exibirCodigo() {
String codigo = titulo.substring(0,3) + getAnoPublicacao();
System.out.println("Código: LIB-" + codigo + " | " + titulo + " - Autor: " + autor);
}
}
Revista
public class Revista extends Midia {
private int edicao;
public Revista(String titulo, int anoPublicacao, int edicao) {
super(titulo, anoPublicacao);
this.edicao = edicao;
}
public int getEdicao() {
return edicao;
}
@Override
public void exibirCodigo() {
String codigo = titulo.substring(0,3) + getAnoPublicacao();
System.out.println("Código: LIB-" + codigo + " | " + titulo + " - Edição: " + edicao);
}
}
Ebook
public class Ebook extends Midia {
private String formato;
public Ebook(String titulo, int anoPublicacao, String formato) {
super(titulo, anoPublicacao);
this.formato = formato;
}
public String getFormato() {
return formato;
}
@Override
public void exibirCodigo() {
String codigo = titulo.substring(0,3) + getAnoPublicacao();
System.out.println("Código: LIB-" + codigo + " | " + titulo + " - Formato: " + formato);
}
}
Fiquei com uma dúvida, na super classe eu deixei o método de gerar o código, em branco e fui sobreescrevendo-o nas demais classes, porém fiquei com o sentimento que num caso hipotético do futuro, dar manutenção nesse código ficaria meio esquisito.