Polimorfismo! [Resolvido]

19 respostas
cleberlz

Olá amigos, gpostaria de saber onde estou errando sobre polimorfismo, vou postar as minhas classes pq tem metodos que não consigo acessar de classes que são extendidas.

package mod7.prog;

/**
 *
 * @author Cléber Zancanaro
 */
public abstract class ContaBancaria {

    private int numero;
    private double saldo;

    public ContaBancaria(int n) {
        this.numero = n;
        this.saldo = 0;
    }

    public abstract void deposita(double valor);

    //retorna false caso haja insuficiência de fundos e true, em caso contrário
    public abstract boolean retira(double valor);

    public void setSaldo(double valor) {
        this.saldo = valor;
    }

    public double getSaldo() {
        return this.saldo;
    }

    public int getNumero() {
        return this.numero;
    }

    public void mostraDados() {
        System.out.println("Conta número: " + this.numero);
        System.out.println("Saldo atual: R$ " + this.saldo);
    }
}
package mod7.prog;

/**
 *
 * @author Cléber Zancanaro
 */
public class ContaCorrente extends ContaBancaria {

    private double limite;

    public ContaCorrente(int n) {
        super(n);
        this.limite = 0;
    }

    @Override
    public void deposita(double valor) {
        this.setSaldo(this.getSaldo() + valor);
    }

    @Override
    public boolean retira(double valor) {
        if (this.getSaldo() >= valor) {
            this.setSaldo(this.getSaldo() - valor);
            return true;
        } else if (this.getSaldo() + this.getLimite() >= valor) {
            this.setSaldo(this.getSaldo() - valor);
            return true;
        } else {
            return false;
        }
    }

    public double getLimite() {
        return limite;
    }

    public void setLimite(double limite) {
        this.limite = limite;
    }

    @Override
    public void mostraDados() {
        super.mostraDados();
        System.out.println("Saldo Limite: R$ " + this.getLimite());
        System.out.println("Saldo Disponível: R$ " + (this.getSaldo() + this.getLimite()));
    }
}
package mod7.prog;

/**
 *
 * @author Cléber Zancanaro
 */
public class ContaPoupanca extends ContaBancaria {

    private double juros;

    public ContaPoupanca(int n) {
        super(n);
    }

    @Override
    public void deposita(double valor) {
        this.setSaldo(this.getSaldo() + valor);
    }

    @Override
    public boolean retira(double valor) {
        if (this.getSaldo() >= valor) {
            this.setSaldo(this.getSaldo() - valor);
            return true;
        } else {
            return false;
        }
    }

    public void aplicaJuros() {
        this.setSaldo(((this.getSaldo() * this.getJuros()) / 100) + this.getSaldo());
    }

    @Override
    public void mostraDados() {
        super.mostraDados();
        System.out.println("Taxa de juros: " + this.getJuros() + "% ao mês");
    }

    public double getJuros() {
        return juros;
    }

    public void setJuros(double juros) {
        this.juros = juros;
    }
}
package mod7.prog;

/**
 *
 * @author Cléber Zancanaro
 */
public class Correntista {

    private String nome;
    private ContaBancaria contaBancaria[];
    private int quantContas;

    public Correntista(String nome) {
        this.nome = nome;
        quantContas = 0;
        contaBancaria = new ContaBancaria[10];
    }

    public boolean abreConta(ContaBancaria cb) {
        quantContas++;
        if (quantContas - 1 < contaBancaria.length) {
            contaBancaria[quantContas - 1] = cb;
            System.out.println(quantContas);
            return true;
        }

        return false;
    }

    public double somaSaldos() {
        double saldo = 0;
        for (int i = 0; i < quantContas; i++) {
            saldo += contaBancaria[i].getSaldo();
        }
        return saldo;

    }

    public ContaBancaria contaDeMaiorSaldo() {
        ContaBancaria maiorSaldo = contaBancaria[0];
        for (int i = 0; i < quantContas; i++) {
            if (contaBancaria[i].getSaldo() > maiorSaldo.getSaldo()) {
                maiorSaldo = contaBancaria[i];
            }
        }
        return maiorSaldo;
    }

    public ContaBancaria[] ordenaContas() {
        ContaBancaria conta = null;
        int indice;

        for (int i = 0; i < quantContas; i++) {
            indice = i;
            for (int j = i + 1; j < quantContas; j++) {
                if (contaBancaria[j].getSaldo() < contaBancaria[indice].getSaldo()) {
                    indice = j;
                }
            }

            if (indice != i) {
                conta = contaBancaria[indice];
                contaBancaria[indice] = contaBancaria[i];
                contaBancaria[i] = conta;
            }

        }
        return contaBancaria;
    }

    public boolean pesquisa(int valor) {
        for (int i = 0; i < quantContas; i++) {
            if (contaBancaria[i].getNumero() == valor) {
                return true;

            }
        }

        return false;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public int getQuantContas() {
        return quantContas;
    }

    public ContaBancaria[] getContaBancaria() {
        return contaBancaria;
    }
}
package mod7.prog;

/**
 *
 * @author Cleber Zancanaro
 */
public class SistemaBancario {

    static Correntista c;
    static Teclado t = new Teclado();
    static int opc = 0;

    public static void main(String[] args) {
        telaAbertura();
        c = new Correntista(t.leString());

        do {
            opc = menuPrincipal();
            switch (opc) {
                case 1: // poupanca
                    int opc1 = t.leInt();
                    do {
                        switch (opc1) {
                            case 1: // abre conta
                                if (c.abreConta(c.getQuantContas())) {
                                    System.out.println("A Conta foi aberta com sucesso!");
                                } else {
                                    System.out.println("A Conta não pode ser aberta, limite máximo de contas excedido!");
                                }
                                break;
                            case 2: // deposita
                                if (c.getContaBancaria(). = null) {
                                    System.out.println("Você deve pesquisar uma conta antes de depositar");
                                } else {
                                    System.out.println("Digite o valor do depósito:");
                                    c.deposita();
                                }
                                break;
                            case 3: // saca
                                break;
                            case 4: // saldo
                                break;
                            case 5: // altera juros
                                System.out.println("Digite a taxa de juros:");
                                cp.setJuros(t.leDouble());
                                break;
                            case 6: // exibe juros
                                break;
                            case 7: // aplica juros
                                break;
                            case 8: // exibe dados
                                break;
                            case 0:
                                break;
                            default:
                                System.out.println("Opcao Invalida!");
                                break;
                        }
                    } while (opc1 != 0);
                    break;
                case 2: // corrente
                    break;
                case 3: // soma saldos
                    break;
                case 4: // maior saldo
                    break;
                case 5: // ordena contas
                    break;
                case 6: // exibe correntista
                    break;
                case 0:
                    System.out.println("Tchau!");
                    break;
                default:
                    System.out.println("Opcao Invalida!");
                    break;
            }

        } while (opc != 0);
    }

    public static int menuPrincipal() {
        System.out.println("------------------MENU PRINCIPAL-----------------");
        System.out.println("1 - Conta Poupanca");
        System.out.println("2 - Conta Corrente");
        System.out.println("3 - Soma saldo das contas");
        System.out.println("4 - Exibe conta com maior saldo");
        System.out.println("5 - Ordena contas em order crescente");
        System.out.println("6 - Exibe nome do correntista");
        System.out.println("0 - Sair");
        System.out.println("-------------DIGITE A OPCAO DESEJADA----------");

        return t.leInt();
    }

    public static int menuPoupanca() {
        System.out.println("--------------MENU CONTA POUPANCA----------------");
        System.out.println("1 - Abertura de Contas");
        System.out.println("2 - Deposito");
        System.out.println("3 - Saque");
        System.out.println("4 - Saldo");
        System.out.println("5 - Altera taxa Juros");
        System.out.println("6 - Exibe taxa Juros");
        System.out.println("7 - Aplicar Juros");
        System.out.println("8 - Mostra dados da conta");
        System.out.println("0 - Voltar ao menu anterior");
        System.out.println("-------------DIGITE A OPCAO DESEJADA----------");

        return t.leInt();
    }

    public static int menuCorrente() {
        System.out.println("--------------MENU CONTA CORRENTE----------------");
        System.out.println("1 - Abertura de Contas");
        System.out.println("2 - Deposito");
        System.out.println("3 - Saque");
        System.out.println("4 - Saldo");
        System.out.println("5 - Altera Limite de credito");
        System.out.println("6 - Exibir Limite de credito");
        System.out.println("7 - Mostra dados da conta");
        System.out.println("0 - Voltar ao menu anterior");
        System.out.println("-------------DIGITE A OPCAO DESEJADA----------");

        return t.leInt();
    }

    public static void telaAbertura() {
        System.out.println("---------SISBANK - Seja bem vindo!---------------");
        System.out.println("Insira o nome do correntista:");
    }
}
Desde já agradeço a atenção. Obrigado

19 Respostas

ViniGodoy

Ajuda se vc disse quais métodos são e em que linha você está tendo o problema, e que mensagem de erro o java dá.

marcelo.bellissimo

há muitos erros nesse código, na classe SistemaBancario… qual IDE você está usando?

cleberlz

Olá amigos, sim ela está muito confusa e gostaria de uma ajuda para organiza-la e assim aprender o padrão.
Eu uso netbeans.

marcelo.bellissimo

cleberlz:
Olá amigos, sim ela está muito confusa e gostaria de uma ajuda para organiza-la e assim aprender o padrão.
Eu uso netbeans.

E ele não está te mostrando os erros? Essa classe SistemaBancario está repleta de erros… veja os erros e a descrição do erro que o NetBeans mostra, já deve ser de grande ajuda…

Existem alguns métodos com parâmetros errados, métodos que não existem, há um ponto no meio do código que não faz nenhum sentido, dê uma revisada geral nesse código… e se tiver dúvida em algum trecho específico, só falar…

cleberlz

Sim, eu sei que tem erros na classe sistemaBancario, pois eu parei no meio dela, acho que acabei me expressando mal.
Gostaria de saber se tem erros nas outras classes para que eu possa dar continuidade a minha aplicação, tipo se fiz corretamente os metodos, os getters e setters etc…
Obrigado

M3g4d3th

Ae cara, to estudando um pouco aqui, assim que eu acabar aqui eu venho te ajudar a arrumar essa história.

E é Polimorfismo e não Poliformismo. rs

Abraço.

cleberlz

a cabeça já não ta mais ajudando, mas pode deixar que arrumo hehehe,
abraço.

M3g4d3th

Cara, cade a classe Teclado?

Abraço.

cleberlz

tá na mão...

package mod7.prog;

import mod6.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


/** Classe que permite fazer leitura de dados do tipo int, double, char e String,
    do teclado, instanciando um objeto do tipo Teclado
*/

public class Teclado
{
     private String s;
     private InputStreamReader i = new InputStreamReader (System.in);
     private BufferedReader d = new BufferedReader(i);

     /**
        L? um inteiro.
        @return int
     */
     public int leInt ()
     {   int a = 0;
         try
         {
             s = d.readLine();
             a = Integer.parseInt(s);
         }
         catch (IOException e)
         {
             System.out.println ("Erro de I/O: " + e);
         }
         catch (NumberFormatException e)
         {
             System.out.println ("o valor digitado deve ser inteiro: "+e );
         }
         return (a);
     }

     /**
        L? um inteiro, com mensagem.
        @return int
     */
     public int leInt (String msg)
     {   int a = 0;
         System.out.print(msg);
         try
         {
             s = d.readLine();
             a = Integer.parseInt(s);
         }
         catch (IOException e)
         {
             System.out.println ("Erro de I/O: "+e );
         }
         catch (NumberFormatException e)
         {
             System.out.println ("o valor digitado deve ser inteiro: "+e );
         }
         return (a);
     }

     /**
        L? um double.
        @return double
     */
     public double leDouble()
     {   double a = 0;
         try
         {
             s = d.readLine();
             a = Double.parseDouble(s);
         }
         catch (IOException e)
         {
             System.out.println ("Erro de I/O: " + e);
         }
         catch (NumberFormatException e)
         {
             System.out.println ("o valor digitado deve ser n?mero: "+e );
         }
         return (a);
     }

     /**
        L? um double, com mensagem.
        @return double
     */
     public double leDouble(String msg)
     {   double a = 0;
         System.out.print(msg);
         try
         {
             s = d.readLine();
             a = Double.parseDouble(s);
         }
         catch (IOException e)
         {
             System.out.println ("Erro de I/O: " + e);
         }
         catch (NumberFormatException e)
         {
             System.out.println ("o valor digitado deve ser numero: "+e );
         }
         return (a);
     }

     /**
        L? um string.
        @return String
     */
     public String leString()
     {   s = "";
         try
         {
            s = d.readLine();
         }
         catch (IOException e)
         {
            System.out.println ("Erro de I/O: " + e);
         }
         return (s);
     }

     /**
        L? um string. com mensagem.
        @return String
     */
     public String leString(String msg)
     {   s = "";
         System.out.print(msg);
         try
         {
            s = d.readLine();
         }
         catch (IOException e)
         {
            System.out.println ("Erro de I/O: " + e);
         }
         return (s);
     }
     /**
        L? um caractere, com mensagem.
        @return char
     */
     public char leChar (String msg)
     {   char a=' ';
         System.out.print(msg);
         try
         {
             s = d.readLine();
             a = s.charAt(0);
         }
         catch (IOException e)
         {
             System.out.println ("Erro de I/O: "+e );
         }
         catch (NumberFormatException e)
         {
             System.out.println ("o valor digitado deve ser um caractere: "+e );
         }
         return (a);
     }


}
M3g4d3th

Cara no sua classe Correntista ta assim:

public boolean abreConta(ContaBancaria cb) {  
         quantContas++;  
         if (quantContas - 1 < contaBancaria.length) {  
             contaBancaria[quantContas - 1] = cb;  
             System.out.println(quantContas);  
             return true;  
        }  
   
         return false;  
     }

Pelo o que entendi tem que ser um método para abrir novas contas, eu modifiquei.

public void abreConta(ContaBancaria cb) {
		quantContas++;
		if (quantContas - 1 < contaBancaria.length) {
			contaBancaria[quantContas - 1] = cb;
			System.out.println(quantContas);
			
		}

	
	}

Mas to fuçando aqui ainda rs.

peczenyj

http://blog.caelum.com.br/2006/09/14/nao-aprender-oo-getters-e-setters/

cleberlz

Amigo M3g4d3th, para não tomar muito o seu tempo, eu gostaria de saber pq não consigo atraves da classe Correntista acessar os metodos da classe contaPoupanca, por exemplo o método aplicaJuros?

Vou te explicar desde o principio, tenho a classe ContaBancaria, dessa classe tenho que extender outras 2 ContaPoupanca e ContaCorrente, uma com juros e a outra com limite, depois criei outra classe Correntista que pode ter um limite de 10 contas bancarias independete se for poupanca ou contacorrente, ai que me perdi… hehe como faço pra acessar essas contas que crio?

M3g4d3th

Velho, pelo o que eu entendi a classe Correntista tem muita coisa errada.
E acho que as outras classes também, eu to examinando aqui, acho que vou fazer desde o início rs, fica mais fácil.

Ve ai também o que vc consegue e vai passando os resultados.

M3g4d3th

cleberlz:
Amigo M3g4d3th, para não tomar muito o seu tempo, eu gostaria de saber pq não consigo atraves da classe Correntista acessar os metodos da classe contaPoupanca, por exemplo o método aplicaJuros?

Vou te explicar desde o principio, tenho a classe ContaBancaria, dessa classe tenho que extender outras 2 ContaPoupanca e ContaCorrente, uma com juros e a outra com limite, depois criei outra classe Correntista que pode ter um limite de 10 contas bancarias independete se for poupanca ou contacorrente, ai que me perdi… hehe como faço pra acessar essas contas que crio?

se não me engano, você precisa de um método main para acessar os métodos de outras classes direto, ou de algum método para acessar os outros métodos de outra classe.

Veja como eu fiz.

public class Correntista {

	private String nome;
	private ContaCorrente cc;

	static private int quantContas;;;
;
	public Correntista(String nome) {
		this.nome = nome;
		quantContas = 0;
		// contaBancaria = new ContaBancaria[10];
	}

	public void abreContaCorrente(double lim, double val) {
		quantContas++;
		cc = new ContaCorrente();
		cc.setLimite(lim);
		cc.setSaldo(val);
		
	}
}

Ainda to fazendo rs.

cleberlz

Poir é tbm to vendo que tem varios erros, estou lendo alguns artigos e aprendendo um pouco mais.
Espero não estar atrapalhando a galera do guj, pq quando eu ficar fera como vcs tbm vou ajudar os outros.
Abraço.

marcelo.bellissimo

Quanto ao polimorfismo não ví problemas… você acha que alguma coisa está errada?

Você possui uma classe abstrata, e duas outras que extendem ela… eu acho que o método deposita poderia ser colocado na classe abstrata já que ambas as implementações (da ContaCorrente e ContaPoupanca) fazem exatamente a mesma coisa… fora isso, e os erros de compilação, está tudo normal…

cleberlz

Sim, teoricamante seria com o método deposita na classe ContaPoupanca, só que é um trabalho academico e ta assim no esboço dele, ai tenho que seguir, mas acho que o grande problema está na classe Correntista to achando meio bagunçado, era pra ela ter um array de contas que possa ter no máximo 10 contas não importando se são de correntes ou poupanças.

M3g4d3th

Cara manda o corpo do exercicio, sem ter feito nada, pra eu fazer conforme o seu professor pediu.

Pq eu to fazendo de várias outras formas rs…

Abraço.

M3g4d3th

Ae cara, tu já resolveu? Rs, eu to aqui resolvendo ainda.

Dentro da classe Correntista eu fiz o seguinte.

public void abreContaCorrente() {
		quantContas++;
		cc = new ContaCorrente();
		System.out.println("Digite número da Conta: ");
		cc.setNumero(t.leInt());
		System.out.println("Digite o Saldo Atual: ");
		cc.setSaldo(t.leDouble());
		System.out.println("Digite o Limite da Conta: ");
		cc.setLimite(t.leDouble());
		System.out.println("Nome do Correntinsta: " + nome);
		cc.mostraDados();
	}

No caso para ele ler os comandos, agora eu to arrumando pra ler tudo rs

Criado 19 de abril de 2010
Ultima resposta 20 de abr. de 2010
Respostas 19
Participantes 5