I'm doing a college job in which I have to develop a banking system, so I have 3 account types (1 class for each type), so I want to use an array of generic objects. The problem is to access the methods of the objects contained in the array, in which eclipse is asking for casting.
Main class:
import java.util.Scanner;
public class programa {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Object[] arrayContas = new Object[50];
Object elementoConta;
System.out.println("1. Gerente. \n");
System.out.println("2. Cliente. \n");
System.out.println("3. Sair. \n");
int opcao = input.nextInt();
switch(opcao)
{
case 1:
{
System.out.println("1. Criar nova conta. \n");
System.out.println("2. Vizualizar informações. \n");
opcao = input.nextInt();
switch(opcao)
{
case 1:
menuGerente.criarConta(arrayContas);
break;
case 2:
{
System.out.println("Digite o número da conta desejada: ");
int numeroDaConta = input.nextInt();
elementoConta = arrayContas[numeroDaConta];
elementoConta.print();
}
}
}
}
input.close();
}
}
Manager class:
import java.util.Scanner;
public class menuGerente {
public static Object criarConta(Object[] contas)
{
Scanner input = new Scanner(System.in);
int numeroConta = 0;
String correntista;
while(contas[numeroConta] != null)
{
numeroConta++;
}
System.out.println("Digite:\n 1 para conta simples.\n 2 para conta especial.\n 3 para conta poupança.\n");
int opcao = input.nextInt();
switch(opcao)
{
case 1:
{
System.out.printf("Digite o nome do correntsta: ");
correntista = input.nextLine();
System.out.println();
conta novaConta = new conta(correntista, numeroConta);
contas[numeroConta] = novaConta;
break;
}
case 2:
{
System.out.printf("Digite o nome do correntsta: ");
correntista = input.nextLine();
System.out.println();
System.out.printf("Digite o limite da conta: ");
int limite = input.nextInt();
System.out.println();
contaEspecial novaConta = new contaEspecial(numeroConta, correntista, limite);
contas[numeroConta] = novaConta;
break;
}
case 3:
{
System.out.printf("Digite o nome do correntsta: ");
correntista = input.nextLine();
System.out.println();
System.out.printf("Digite o rendimento da conta: ");
double rendimento = input.nextDouble();
System.out.println();
contaEspecial novaConta = new contaEspecial(numeroConta, correntista, rendimento);
contas[numeroConta] = novaConta;
break;
}
}
input.close();
return contas;
}
}
Account Type 1:
public class conta {
private int numeroConta;
private String senha = "0000";
private String nomeCorrentista;
protected double saldo = 0.0;
protected String tipo = "Simples";
//Construtor---------------------------------------------
public conta(String nomeCorrentista, int numeroConta)
{
this.numeroConta = numeroConta;
this.nomeCorrentista = nomeCorrentista;
}
//Getters---------------------------------------------------
int getConta()
{
return numeroConta;
}
String getCorrentista()
{
return nomeCorrentista;
}
double getSaldo()
{
return saldo;
}
//Métodos sacar, depositar e alterarSenha------------------------
void sacar(double saque)
{
if(Math.abs(saldo - saque) < 0)
{
saldo = saldo - saque;
System.out.println("Saque realizado com sucesso!");
}
else
{
System.out.println("Saldo Insulficiente!");
}
}
void depositar(double valor)
{
saldo = saldo + valor;
System.out.println("Depósito realizado com sucesso!");
}
void alteraSenha(String senhaAntiga, String senhaNova)
{
if(senhaAntiga.equals(senha))
{
senha = senhaNova;
System.out.println("Senha alterada com Sucesso!");
}
else
{
System.out.println("Senha antiga incorreta!");
}
}
//Print--------------------------------------------------------
void print()
{
System.out.printf("O nome do correntista é %s. \n", getCorrentista());
System.out.printf("O numero da conta é %d. \n", getConta());
System.out.printf("A conta é do tipo %s. \n", tipo);
System.out.printf("O saldo é de R$ %.2f. \n", getSaldo());
}
}
Type 2 Account:
public class contaEspecial extends conta{
double limite;
public contaEspecial(int numeroConta, String nomeCorrentista, double limite)
{
super(nomeCorrentista, numeroConta);
tipo = "Especial";
this.limite = limite;
}
void sacar(double saque)
{
if(Math.abs(saldo - saque) < limite)
{
saldo = saldo - saque;
System.out.println("Saque realizado com sucesso!");
}
else
{
System.out.println("Saldo Insulficiente!");
}
}
void print()
{
System.out.printf("O nome do correntista é %s. \n", getCorrentista());
System.out.printf("O numero da conta é %d. \n", getConta());
System.out.printf("A conta é do tipo %s. \n", tipo);
System.out.printf("O saldo é de R$ %.2f. \n", getSaldo());
System.out.printf("O limite é de %.2f. \n", limite);
}
}
There are more things, but it's already too big kkkk.