[Resolvido] Acessar método de um objeto dentro do arraylist

3 respostas
Marcelo_de_Andrade

Boa noite pessoal. Antes de tudo peço perdão pois há inúmeros tópicos sobre o mesmo assunto ( arraylist ) porém já estudei os casos e nehum que encontrei ajudou em minha dúvida principal, outras eu já sanei, e gostarei da boa ajuda dos nossos amigos GUJ.

Estou implementando uma classe abstrata contaBancaria que é pai de contaCorrente e ContaPoupanca. Eu devo armazenar as contas criadas ( o usuário dirá a quantidade desejada ) em um arraylist. O meu problema é que não consigo acessar os elementos dentro do maldito arraylist e creio que seja a forma que estou implementando.

contaBancaria.java
public abstract class ContaBancaria {

	protected int numero;
	protected int senha;
	protected double saldo;
	
	public ContaBancaria(double pSaldo, int pNumero, int pSenha) {
		this.numero = pNumero;
		this.saldo  = pSaldo;
		this.senha  = pSenha;
	}
		
	abstract void saca(double valor);
	abstract void deposita(double valor);
	abstract void consultarExtrato();
	
	public int numero(){
		return this.numero;
	}
	
	public void alteraSenha(int novaSenha){
		
	}	
}
contaCorrente.java
public class ContaCorrente extends ContaBancaria {

	private int transacoesRealizadas;
	
	public ContaCorrente(double pSaldo, int pNumero, int pSenha) {
		super(pSaldo, pNumero, pSenha);
	}

	@Override
	public void saca(double valor) {
		this.saldo -= valor;
		++this.transacoesRealizadas;
	}

	@Override
	public void deposita(double valor) {
		this.saldo += valor;
		++this.transacoesRealizadas;
	}

	@Override
	public void consultarExtrato() {
		System.out.printf("Saldo: %s \nQuantidade de transações realizadas: %s \n", this.saldo , this.transacoesRealizadas);		
	}
	
	public int retornarTransacoesRealizadas(){
		return this.transacoesRealizadas;
	}
	
	public int numero(){
		return this.numero;
	}
	
}
contaPoupanca.java:
public class ContaPoupanca extends ContaBancaria {

	private double taxaRendimento;
	
	public ContaPoupanca(double pSaldo, int pNumero, int pSenha) {
		super(pSaldo, pNumero, pSenha);
	}

	@Override
	public void saca(double valor) {
		this.saldo -= valor;
	}

	@Override
	public void deposita(double valor) {
		this.saldo += valor;
	}

	@Override
	public void consultarExtrato() {
		System.out.printf("Saldo: %s \n", this.saldo );		
	}
	
	public double retornartaxaRendimento(){
		return this.taxaRendimento;
	}
	
	public void definirTaxaRendimento(double pTaxaRendimento){
		this.taxaRendimento = pTaxaRendimento;
	}
	
	public int numero(){
		return this.numero;
	}
	
}
conta.java:
public class Conta {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		ArrayList<Object> contas = new ArrayList<Object>();
		
		System.out.println("###########  SYSBANK  ###########");
		
		System.out.println("Quantas contas deseja criar?");
		int qtContas = sc.nextInt();
			
		for(int i = 1; i <= qtContas; i++){
			
			System.out.println("Qual o tipo de conta deseja criar?");
			System.out.println("1 - Conta corrente");
			System.out.println("2 - Conta poupança");
			int tipoConta = sc.nextInt();
		   
			System.out.println("Digite o Numero da Conta");  
			int numeroConta = sc.nextInt();
		
			System.out.println("Digite o saldo"); 
			double saldoConta = sc.nextDouble();
		
			System.out.println("Digite a senha da Conta");  
			int senhaConta = sc.nextInt();
			
		    	if(tipoConta == 1){
		    		
		    		ContaCorrente novaContaCorrente = new ContaCorrente(saldoConta, numeroConta, senhaConta);
		    		contas.add(novaContaCorrente);
		    		
		    	} else if(tipoConta == 2) {    
		    		
		    		ContaPoupanca novaContaPupanca = new ContaPoupanca(saldoConta, numeroConta, senhaConta);
		    		contas.add(novaContaPupanca);
		    		
		    	} else {
		    		System.out.println("Tipo de conta inválido.");
				}				
		}

		for (int i = 0; i < contas.size(); i++) {
			System.out.println( contas.get(i).getNumero() );
		}

	}

}
O problema se dá aqui:
for (int i = 0; i < contas.size(); i++) {
			System.out.println( contas.get(i).getNumero() );
		}

Não consigo acessar o getNumero ou qualquer método que eu implemente no objeto dentro do arraylist. Poderiam me ajudar e indicar onde estou errando?

Obrigado.
Abraços.

3 Respostas

Jemerson

De cara percebi que getNumero() não existe! Mas vamos lá:

ArrayList<Object> contas = new ArrayList<Object>()

A linha acima representa um array de objetos genéricos, se não estou enganado.

O que eu acho correto de ser feito seria o seguinte:

ArrayList<ContaBancaria> contas = new ArrayList<ContaBancaria>();

System.out.println(contas.get(i).numero());

Já que contas é uma lista de contas que varia entre poupança e cc, basta fazer uma lista de elementos de quem é o pai de todas as contas.

Perceba que na impressão não usei getNumero(), pois não existe esse método em seu código. Sendo assim, acessei o método numero() que está
presente desde a classe pai até as filhas.

Espero ter ajudado!

T

Bom dia, amigo.

Pra que criar um arraylist genérico para este caso?
Seu array não vai sempre conter objetos de um tipo?
Então…

Eu sugiro que você faça como o amigo acima explicou.
Entretanto, caso queira manter seu código, basta dar um cast na hora da exibição do seu arraylist.

Então altere esta linha:

System.out.println( (contas.get(i)).getNumero() );

para

System.out.println( ([b](ContaCorrente)[/b] contas.get(i)).getNumero() );

Espero ter ajudado.
Qualquer duvida avise!

Att

Marcelo_de_Andrade

Obrigado pelas respostas.

Jemerson, desculpa pelo método. É que eu estava trocando os nomes e terminei postando aqui ele incompleto. Mesmo com o nome correto eu não estava conseguindo acessá-lo, dessa forma havia deixado como genérico.

TreTaA, obrigado pela dica, eu já estava utilizando quando estudei mais um pouco o erro que estava ocorrendo. Defini o arraylist como do tipo ContaBancaria e explicitei o CAST quando fosse necessário.

Muito obrigado pela ajuda. Resolvido.

Criado 16 de junho de 2012
Ultima resposta 18 de jun. de 2012
Respostas 3
Participantes 3