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());
}
}
}