Bom dia,
Eu tenho minha classe ContaPoupanca
que extends a classe Conta
.
A classe Conta
implementa o CompareTo:
@Override //ordena pelo número da conta
public int compareTo(Conta outra) {
if (this.numero < outra.numero) return -1;
if (this.numero > outra.numero) return 1;
return 0;
}
E agora eu sobrescrevi o método na classe ContaPoupanca
:
@Override
public int compareTo(Conta outra) {
return nomeDoCliente.compareTo(outra.nomeDoCliente);
}
Acontece que quando eu vou ordenar contas do tipo ContaCorrente
(que também extends Conta
, mas não sobrescreve o método CompareTo) e do tipo ContaPoupanca
:
package com.company.br.com.caelum.fj11.programa;
import com.company.br.com.caelum.fj11.modelo.Conta;
import com.company.br.com.caelum.fj11.modelo.ContaCorrente;
import com.company.br.com.caelum.fj11.modelo.ContaPoupanca;
import javax.swing.*;
import java.util.*;
public class TestaOrdenacao {
public static void main(String[] args) {
List<Conta> contas = new LinkedList<>(); //pode trocar por ArrayList = polimorfismo
Random random = new Random();
Conta c1 = new ContaPoupanca(1389, "João Barbosa"); //new ContaPoupanca(random.nextInt(2000), "João Barbosa");
c1.deposita(500);//(random.nextInt(10000) + random.nextDouble());
Conta c2 = new ContaCorrente(random.nextInt(2000), "Maria Severina");
c2.deposita(random.nextInt(10000) + random.nextDouble());
Conta c3 = new ContaPoupanca(400, "Rosa Santos"); //new ContaPoupanca(random.nextInt(2000), "Rosa Santos");
c3.deposita(500);//(random.nextInt(10000) + random.nextDouble());
contas.add(c1);
contas.add(c2);
contas.add(c3);
Collections.sort(contas);
for (Conta c : contas) { //Solução do Instrutor
System.out.print(c.getNomeDoCliente() + " ");
System.out.println(c); //coloquei só isso System.out.println(contas);
}
}
}
A saída é:
/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/bin/java "-javaagent:/Applications/IntelliJ IDEA CE.app/Contents/lib/idea_rt.jar=49287:/Applications/IntelliJ IDEA CE.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath /Users/brunasantos/IdeaProjects/BancoAntigo/out/production/BancoAntigo com.company.br.com.caelum.fj11.programa.TestaOrdenacao
João Barbosa Conta número 1389, com saldo R$ 499.9
Maria Severina Conta número 1393, com saldo R$ 6136.997724786507
Rosa Santos Conta número 400, com saldo R$ 499.9
Process finished with exit code 0
Se a conta da Maria
é do tipo ContaCorrente
, é ordenada através do número, então ela não deveria vir depois da conta da Rosa
? E aí as contas do tipo ContaPoupanca
ordenadas pelo nome do cliente
? A saída que eu esperava era essa:
João Barbosa Conta número 1389, com saldo R$ 499.9
Rosa Santos Conta número 400, com saldo R$ 499.9
Maria Severina Conta número 1393, com saldo R$ 6136.997724786507
Por que não fica assim?
Obrigada!