Olá pessoal, estou com uma duvida em um codigo que estou efetuando. A ideia foi a seguinte: Uma classe mãe Produto recebendo nome, preço, seus respectivos getters e setters e o método toString(), três classes filhas CD, Livro e DVD também herdando o metódo toString() do Produto.
toString da classe mãe
public String toString() {
return "Nome: "+ getName()
+String.format("\nPreço: R$%.2f",getPreco());
}
toString das classes filhas
//CD
@Override
public String toString() {
return super.toString() + "\nNumero de Faixas: " + NumeroFaixas;
}
//Livro
@Override
public String toString() {
return super.toString()+ "\nAutor: " + autor;
}
//DVD
@Override
public String toString(){
return super.toString() + "\nDuração: " + duracao;
}
Também criei uma classe CadastroProduto para o cadastro desses produtos
public class CadastroProduto {
public void cadastroProduto(){
{
Scanner sc = new Scanner(System.in);
Scanner sc2 = new Scanner(System.in);
String nome, autor;
int numeroFaixas, opcao;
double preco, duracao;
System.out.println("Insira a opção do produto a cadastrar\n1 - Livros\n2 - CD\n3 - DVD");
opcao = sc.nextInt();
switch (opcao){
case 1:
Livro livro = new Livro();
System.out.println("Insira o nome do livro");
livro.setName(sc2.nextLine());
System.out.println();
System.out.println("Insira o preço do livro ");
preco = sc.nextDouble();
livro.setPreco(preco);
System.out.println("Insira o nome do autor");
autor = sc2.nextLine();
livro.setAutor(autor);
break;
case 2:
CD cd = new CD();
System.out.println("Insira o nome do CD");
nome = sc2.nextLine();
cd.setName(nome);
System.out.println("Insira o preço do CD");
preco = sc.nextDouble();
cd.setPreco(preco);
System.out.println("Insira o número de faixas");
numeroFaixas = sc.nextInt();
cd.setNumeroFaixas(numeroFaixas);
break;
case 3:
DVDs dvd = new DVDs();
System.out.println("Insira o nome do DVD");
nome = sc2.nextLine();
dvd.setName(nome);
System.out.println("Insira o preço do DVD");
preco = sc.nextDouble();
System.out.println("Insira a duração do DVD");
duracao = sc.nextDouble();
break;
default:
System.out.println("Opção inválida");
}
}
}
}
E por fim o main Loja
public class Loja {
public static void main(String[] args) {
Locale.setDefault(Locale.US);
int[] vetor = new int[5];
CadastroProduto CP = new CadastroProduto();
for (int i = 0; i < vetor.length; i++){
CP.cadastroProduto();
}
for (int i = 0; i < vetor.length; i++){
System.out.println(CP);
}
Porém o programa está retornando a referência ao imprimir (inclusive, a mesma referência para os produtos) e não as mensagens colocadas nos produtos. "CadastroProduto@2344fc66 CadastroProduto@2344fc66 CadastroProduto@2344fc66 CadastroProduto@2344fc66 CadastroProduto@2344fc66 "
Pensei que o toString() resolveria esse problema, podem me dar uma luz sobre esse detalhe da impressão e um feedback sobre a herança das classe?