How to access methods of an object array?

Asked

Viewed 219 times

1

I am doing a work of the college in which I have to develop a banking system, for this I have 3 types of account (1 class for each type), therefore I want to use an array of generic objects. The problem is accessing the methods of objects contained in the array, in which the 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;
    }
}

Type 1 account:

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);
    }

}

It has more things, but it is already very big kkkk.

  • "so I want to use a generic object array" - how so ? You can detail a little more what you mean by this statement ?

1 answer

1


The compiler will not allow you to access an Account method through an object of type Object, as Object does not contain Account methods. To make the compiler understand that there is an Account object in this Object array, you need to cast, this way:

((Conta) arrayContas[0]).getSaldo();

But it got kind of ugly, didn’t it? Instead, you can just declare your array of accounts as Conta[] arrayContas = new Conta[50];. Like contaEspecial extends Account, you can store both Account and contaEspecial in this Account array, so your compiler will already know that the objects in this array have Account methods, so you can access them simply by using:

arrayContas[0].getSaldo();
  • Thank you @user129564 for sure! Saved!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.