2
respostas

Método compareTo na classe filha e pai

Olá,

Porque não posso ter a classe pai e filha implementando comparable?

Classe Conta:

package br.com.alura.java2.modelos;

import br.com.alura.java2.main.ValorInvalidoException;

public abstract class Conta implements Comparable<Conta>{

    protected String nome;
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    protected double saldo;
    protected int numero;

    public int getNumero() {
        return numero;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }

    public double getSaldo() {
        return saldo;
    }

    public void deposita(double valor) throws ValorInvalidoException {
        if(valor < 0){
            throw new ValorInvalidoException(valor);
        } else{
            this.saldo += valor;
        }
    }

    public void saca(double valor) {
        if(this.saldo >= valor){
            this.saldo -= valor;
        } 
        else {
            throw new SaldoInsuficienteException(saldo);
        }
    }

    public abstract void atualiza(double taxa);

    @Override
    public boolean equals(Object obj) {
        Conta outraConta = (Conta) obj;
        return this.saldo == outraConta.getSaldo();
    }

    public int compareTo(Conta outra) {
        return this.getNumero() - outra.getNumero();
    }
}

Classe ContaPoupanca:

package br.com.alura.java2.modelos;

public class ContaPoupanca extends Conta implements Comparable<ContaPoupanca>{

    public ContaPoupanca(int numero, String nome){
        this.numero = numero;
        this.nome = nome;
    }

    public void atualiza(double taxa) {
        this.saldo += this.saldo * taxa * 3;
    }

    public void deposita(double valor) {
        this.saldo += valor - 0.10;
    }

    public int compareTo(ContaPoupanca c) {
        return this.numero - c.getNumero();
    }

}

Classe TesteOrdenacao:

package br.com.alura.java2.modelos;

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;

public class TesteOrdenacao {
    public static void main(String[] args) {
        List<ContaPoupanca> contas = new LinkedList<ContaPoupanca>();
        Random random = new Random();

        ContaPoupanca c1 = new ContaPoupanca(100,"Gustavo");
        c1.deposita(random.nextInt()+ random.nextDouble());
        contas.add(c1);

        ContaPoupanca c2 = new ContaPoupanca(200,"Maria");
        c2.deposita(random.nextInt()+ random.nextDouble());
        contas.add(c2);

        ContaPoupanca c3 = new ContaPoupanca(80,"Wesley");
        c3.deposita(random.nextInt()+ random.nextDouble());
        contas.add(c3);

        Collections.sort(contas);
        for(ContaPoupanca conta : contas){
            System.out.println(conta.getNome()+" "+conta.getSaldo());
        }

    }
}
2 respostas

Oi Gustavo, tudo bom?

A menos que a classe filha tenha uma lógica diferente de comparação, ela ja puxa da classe pai o metodo compareTo. Por isso não há necessidade de escrever o mesmo método nas duas.

Mas elas estão comparando objetos diferentes. Isso não torna o método tambémm diferente?

Outra coisa, se eu implemento comparable na classe conta e depois na ContaPoupanca, o erro ja acontece. Mesmo antes de criar o método compareTo.