Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Interface Comparable

Pq a interface Comparable não obriga a implementação de métodos pelas classes que a implementam? O código está compilando sem problemas, mesmo sem a implementação do método compareTo().

/**
 *  
 * @author Felipe
 *
 */
public abstract class Conta implements Comparable<Conta> {

    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 número.
    * 
    * @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 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 "Tituar: " + this.titular.getNome() + ", SAlDO: " + this.saldo;
    }

}
2 respostas

Olá Felipe, tudo bem com você?

De acordo com a documentação do Java:

A menos que a classe sendo declarada seja abstrata, todos os métodos abstratos de cada superinterface direta devem ser implementados por uma declaração nesta classe ou por uma declaração de método existente herdada da superclasse direta ou de uma superinterface direta, porque uma classe isso não abstracté permitido ter abstractmétodos.

Em outras palavras, alguém relacionado à classe Conta implementou o compareTo(). E o motivo para a classe Conta não apresentar nenhum erro mesmo não implementando o compareTo() é porque ela uma classe abstrata. O que significa que alguma subclasse de Conta deve implementar o método em seu lugar.

Tanto que se você não tiver implementado o compareTo() em suas subclasses ContaCorrente, ContaPoupanca e ContaEspecial, o esperado é que elas apresentem erros de compilação por não implementarem o compareTo() dentro delas, ou por não herdarem de alguém que o implemente!

Bom, é basicamente isso. Se ficou alguma dúvida, por favor, me avise! :)

Agradeço a resposta Thiago!

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