Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Erro de Exception

Estou com diversas classes abertas (selecionadas pelo professor) as quais estamos usando em aula. (todas dando mesmo erro no console) No momento em que clico Run As, no console imprime um erro:

Exception in thread "main" java.lang.ClassCastException: class br.com.bytebank.banco.modelo.ContaCorrente cannot be cast to class br.com.bytebank.banco.modelo.Conta (br.com.bytebank.banco.modelo.ContaCorrente and br.com.bytebank.banco.modelo.Conta are in unnamed module of loader 'app')
    at br.com.bytebank.banco.teste.util.TesteArrayListEquals.main(TesteArrayListEquals.java:17)

Podem me ajudar? Não estou conseguindo progredir nos estudos.

Obrigada, Karina.

4 respostas

Olá Karina, tudo bem com você?

Você pode postar aqui no fórum a classe ContaCorrente, a class eContae a TestaArrayListEquals?

Pelo erro que está dando no console.log tem algum problema de conversão, com essas classes da para ter uma ideia melhor do que está acontecendo :)

Fico no Aguardo!

Abraço :)

Olá! Tudo bem e você? Segue a classe Conta:

package br.com.bytebank.banco.modelo;


/**
 * Classe representa a moldura de uma conta
 * 
 * @author Karina Tineu
 *
 */
public abstract class Conta extends Object {

    protected double saldo;
    private int agencia;
    private int numero;
    private Cliente titular;
    private static int total = 0;

    /**
     * Construtor para inicializar o objeto Conta a partir da agencia e numero.
     * 
     * @param agencia
     * @param numero
     */
    public Conta(int agencia, int numero){
        Conta.total++;
        //System.out.println("O total de contas é " + Conta.total);
        this.agencia = agencia;
        this.numero = numero;
        //this.saldo = 100;
        //System.out.println("Estou criando uma conta " + this.numero);
    }

    public abstract void deposita(double valor);

    /**
     * Valor precisa ser maior do que o saldo.
     * 
     * @param valor
     * @throws SaldoInsuficienteException
     */
    public void saca(double valor) throws SaldoInsuficienteException{

        if(this.saldo < valor) {
            throw new SaldoInsuficienteException("Saldo: " + this.saldo + ", Valor: " + valor);
        } 

        this.saldo -= valor;       
    }

    public void transfere(double valor, Conta destino) throws SaldoInsuficienteException{
        this.saca(valor);
        destino.deposita(valor);
    }

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

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

    public void setNumero(int numero){
        if(numero <= 0) {
            System.out.println("Nao pode valor menor igual a 0");
            return;
        }
        this.numero = numero;
    }

    public int getAgencia(){
        return this.agencia;
    }

    public void setAgencia(int agencia){
       if(agencia <= 0) {
           System.out.println("Nao pode valor menor igual a 0");
           return;
       }
       this.agencia = agencia;
    }

    public void setTitular(Cliente titular){
        this.titular = titular;
    }

    public Cliente getTitular(){
        return this.titular;
    }

    public static int getTotal(){
        return Conta.total;
    }  

    @Override
    public boolean equals(Object ref) {

            Conta outra = (Conta) ref;

            if(this.agencia != outra.agencia) {
                return false;
            }

            if(this.numero != outra.numero) {
                return false;
            }

            return true;
    }

    @Override
    public String toString() {
        return "Numero: " + this.numero + ", Agencia: " + this.agencia;
    }

}
Conta Corrente:
package br.com.bytebank.banco.modelo;

/**
 * Toda conta corrente deve estar nas conformidades do projeto relacionado ao banco correspondente.
 * 
 * @author Karina Tineu
 *
 */

//new ContaCorrente()
public class ContaCorrente extends Referencia implements Tributavel {

    public ContaCorrente(int agencia, int numero) {
        super(agencia, numero);
    }

    @Override
    public void saca(double valor) throws SaldoInsuficienteException{
        double valorASacar = valor + 0.2;
        super.saca(valorASacar);
    }

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

    @Override
    public double getValorImposto() {    
        return super.saldo * 0.01;
    }

    @Override
    public String toString() {
        return "ContaCorrente, " + super.toString();
    }

}
Classe TestaArrayListEquals:

package br.com.bytebank.banco.teste.util;

import java.util.ArrayList;
import br.com.bytebank.banco.modelo.Conta;
import br.com.bytebank.banco.modelo.ContaCorrente;

public class TesteArrayListEquals {


       public static void main(String[] args) {

           ArrayList<Conta> lista = new ArrayList<Conta>();

         //O Object é a Conta, deixei assim porque como Conta não está compilando

            Object cc1 = new ContaCorrente(22, 22);
            Object cc2 = new ContaCorrente(22, 22);

            lista.add((Conta) cc1);

            for(Conta conta : lista){
                System.out.println(conta);
            }
        }

}

Obrigada pelo retorno, estarei no aguardo.

solução!

Olá Karina, tudo bem?

O problema na verdade está aqui:

public class ContaCorrente extends Referencia implements Tributavel {

A conta corrente não está herdando de Conta, então esse código:

Conta cc1 = new ContaCorrente(22, 22);

Acaba sendo inválido, pois temos aquela regrinha:

Podemos definir a variável com um tipo mais genérico, no caso, Conta, mas instanciar um tipo mais específico, no exemplo, ContaCorrente

Entretanto, como ContaCorrente não herda, ela não é um tipo específico de conta, por isso o erro :)

No caso poderíamos ter apenas:

ArrayList<Referencia> lista = new ArrayList<>();

Referencia ref = new ContaCorrente();

Pois extends Referencia

Ou:


ArrayList<Tributavel> lista = new ArrayList<>();

Tributavel ref = new ContaCorrente();

Pois implements Tributavel

Ou seja, de quem ContaCorrente herda, ou implementa a interface

Para corrigir isso basta trocar de quem ContaCorrente herda, então ficaria:

public class ContaCorrente extends Conta implements Tributavel {

E ai tudo funcionará corretamente :)

Compreendeu? Qualquer coisa estou à disposição!

Abraços e Bons Estudos =)

Olá! Tudo bem? Muito obrigada pelo retorno, voltou a funcionar.

Abraços.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software