package br.com.caelum.fj11.modelo;
import javax.management.RuntimeErrorException;
import br.com.caelum.fj11.excecao.ValorInvalidoException;
//public abstract class Conta {
public abstract class Conta implements  Comparable<Conta> {// este formato significa que Conta pode ser classificada
//  private double saldo;
    protected double saldo;
    //private int numero;
    protected int numero;
    private String nome;
    public double getSaldo() {
        return this.saldo;
    }
    public void setSaldo(double saldo) {
        this.saldo = saldo;
    }
    public String toString() {    
        return "esse objeto é uma conta com saldo R$" + this.saldo;
    }   
    public int getNumero() {
        return this.numero;
    }
    public int setNumero(int numero) {
        return this.numero = numero;
    }
    public String getNome() {
        return this.nome;
    }
    public String setNome(String nome) {
        return this.nome = nome;
    }
    /**
     * realiza um saque na conta dado o valor passado
     * @param valor_saque valor a ser sacado
     * @return
     * @throws Exception Excption caso saldo seja insuficiente
     */
    public boolean saca(double valor_saque) throws Exception {
        if (this.saldo < valor_saque) {
            //return false;
            throw new SaldoInsuficienteException(saldo);
        }
        else {
            this.saldo = this.saldo - valor_saque;
            return true;
        }
    }
// public void deposita(double valor_dep) {//use este formato quando a classe filha de RuntimeException
     public void deposita(double valor_dep) throws ValorInvalidoException  {//use este formato quando a classe filha de Exception       
//     if (valor_dep > 0) {// neste formato utiliza a exeption do java  
//      this.saldo += valor_dep;
//     }
//     else  {
//         throw new IllegalArgumentException("Você tentou depositar" + " um valor negativo");
//     }
       if (valor_dep > 0) {// neste formato utiliza a exeption pelo programador
          this.saldo += valor_dep;
         }
         else  {
             throw new ValorInvalidoException(valor_dep);
         }       
    }      
     /**
         * atualiza nome e numero de conta
         * 
         */
        public void idConta(int numero, String nome) {
            this.numero = numero;
            this.nome   = nome;
        }
        @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((nome == null) ? 0 : nome.hashCode());
        result = prime * result + numero;
        return result;
    }
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Conta other = (Conta) obj;
            if (nome == null) {
                if (other.nome != null)
                    return false;
            } else if (!nome.equals(other.nome))
                return false;
            if (numero != other.numero)
                return false;
            return true;
        }
          public int compareTo(Conta outra) {
              if(this.saldo < outra.saldo) {
                return -1;
            }
            if(this.saldo > outra.saldo) {
                return 1;
            }
            return 0;
        }
   //public void atualiza(double taxa) {                                                                                                   
   //     this.saldo += (this.saldo * taxa);                                                                                                       
   // };       
    abstract public void atualiza(double taxa);
}
Fiz a implementação na classe Conta, para atender conta corrente e conta poupança, agi corretamente ?? ```