/*
 * Copyright (c) 1997-2000 Departamento de Informática - UFPE
 */

/**
 * Esta classe modela uma conta de um banco onde não especificamos como
 * serão realizadas as operaçãoes de cr&eacute;dito e d&eacute;bito.
 */
abstract class ContaAbstrata {

    /**
     * O saldo da conta.
     */
    private double saldo;

    /**
     * O n&uacute;mero da conta.
     */
    private long numero;

    /**
     * Cr&eacute;dito de dinheiro em uma conta. Deve ser implementada
     * em alguma subclasse.
     */
    abstract void creditar(double val);

    /**
     * D&eacute;bito de dinheiro em uma conta. Deve ser implementada
     * em alguma subclasse.
     */
    abstract void debitar(double val);

    /**
     * Imprime o saldo da conta. Útil para testes e depuração.
     */
    void imprimirSaldo() {
        System.out.println("Conta: " + numero + " Saldo: R$" + saldo);
    }
       
    /**
     * Retorna o saldo da conta.
     */
    double getSaldo() {
        return saldo;
    }  
    
    /**
     * Retorna o número da conta.
     */ 
    long getNumero() {
        return numero;
    }  

    /**
     * Transfere a quantia especificada desta conta para a conta dada.
     */
    public void transferir(double v, ContaAbstrata c) {
        this.debito(v);
        c.credito(v);
    } 

}
