/*
 * Copyright (c) 1997-2000 Departamento de Informática - UFPE
 */
/**
 * Classe ContaBonus 
 * As operacoes de cr&eacute;dito e d&eacute;bito s&atildeo similares &agrave;s 
 * operacoes definidas em Conta. No entanto, nesta classe , estas  operacoes
 * tambem incrementam ou decrementam um bonus . Ha tambem um metodo renderBonus
 *  que credita o valor do bonus na conta. E zera o valor do bonus.
 */
public class ContaBonus  extends Conta {
  
    // atributo extra da classe ContaBonus
    private double bonus;
    
    /**
     * Construtor da classe. Chama o construtor da superclasse (Conta)
     * passando os valores recebidos como parametro e inicializa o bonus com 0
     *
     * @param val Valor inicial da conta
     * @param num Numero da conta 
     */
    public ContaBonus (double val, String num) {
        
        // a chamada ao construtor da superclasse, deve ser sempre a primeira 
        // coisa a ser feita dentro do construtor da subclasse
        super (num,val); 
        //inicializa o atributo bonus
        bonus = 0.0;
    }
    
    
    /**
     * Credita o valor do bonus na conta e, em seguida, zera o valor do bonus.     
     */
    public void renderBonus() {
     
        creditar(bonus);
        bonus = 0;
    } 
      
    /**
     * Redefinicao do metodo debitar, definido na superclasse.
     * Faz o debito na conta. Caso o valor debitado seja maior que 500.00,
     * decrementa o bonus em 1% do valor creditado
     *
     * @param  Valor a ser debitado 
     */  
    public void debitar(double val) {
        
        //  usa-se o super para chamar o debitar de Conta 
        //  se usasse this, o programa entraria em loop        
        super.debitar(val);
        if (val > 500.00) {
            // decremento do bonus 	
            bonus = bonus - (val * 0.01);
        }    
    }
    
    /**
     * Redefinicao do metodo creditar, definido na superclasse
     * Faz o credito na conta. Caso o valor creditado seja maior que 500.00,
     * incrementa o bonus em 1% do valor creditado
     *
     * @param  Valor a ser creditado 
     */
    public void creditar(double val) {
        if (val > 500.00) {
            // incremento do bonus 
            bonus = bonus + (val * 0.01);
        }  
        //  usa-se o super para chamar o creditar de Conta 
        //  se usasse this, o programa entraria em loop        
        super.creditar(val);
    }
    
}
