/* package whatever; // don't place package name! */

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
	public static void main(String[] args) {
		List<Conta> list = new ArrayList<Conta>();

		Conta cc1 = new ContaCorrente();
		cc1.setNumero(1);

		Conta cc2 = new ContaCorrente();
		cc2.setNumero(20);

		Conta cc3 = new ContaCorrente();
		cc3.setNumero(25);


		list.add(cc1);
		list.add(cc2);
		list.add(cc3);

		System.out.println(list);
		Collections.sort(list);
		System.out.println("------------");
		System.out.println(list);

	}

	static abstract class Conta implements Comparable<Conta> {
		protected double saldo;
		protected int numero;
		private int agencia;
		private String nome;

		public double getSaldo() {
			return saldo;
		}

		public void deposita(double valor) throws Exception {
			if (valor > 0) {
				this.saldo += valor;
			} else {
				throw new Exception();
			}
			System.out.println("Fim do deposita");
		}

		public void saca(double valor) {
			this.saldo -= valor;
		}

		public abstract void atualiza(double taxaSelic);

		public int getNumero() {
			return numero;
		}

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

		public int getAgencia() {
			return agencia;
		}

		public void setAgencia(int agencia) {
			this.agencia = agencia;
		}
		public String getNome() {
			return nome;
		}
		public void setNome(String nome) {
			this.nome = nome;
		}
		@Override
		public boolean equals(Object obj) {
			if (!(obj instanceof Conta)){
				return false;
			}
			Conta c = (Conta)obj;
			return this.numero == c.numero || this.nome.equals(c.nome);
		}
		@Override
		public String toString() {

			return "Conta de número " + this.numero;
		}
	}
	static class ContaCorrente extends Conta {

		@Override
		public void atualiza(double taxaSelic) {
			this.saldo += (this.saldo * taxaSelic) * 2;
		}


		@Override
		public int compareTo(Conta o) {
			System.out.println("Vai ordenar: "+this.numero+" com "+o.numero);
			if(this.numero > o.numero){
				return -1;
			}
			if (this.numero < o.numero) {
				return 1;
			}
			return 0;
		}
	}
}