package br.com.caelum.fj11.modelo;
import javax.management.RuntimeErrorException;
import br.com.caelum.fj11.excecao.ValorInvalidoException;
//public abstract class Conta {
public abstract class Conta implements Comparable<Conta> {// este formato significa que Conta pode ser classificada
// private double saldo;
protected double saldo;
//private int numero;
protected int numero;
private String nome;
public double getSaldo() {
return this.saldo;
}
public void setSaldo(double saldo) {
this.saldo = saldo;
}
public String toString() {
return "esse objeto é uma conta com saldo R$" + this.saldo;
}
public int getNumero() {
return this.numero;
}
public int setNumero(int numero) {
return this.numero = numero;
}
public String getNome() {
return this.nome;
}
public String setNome(String nome) {
return this.nome = nome;
}
/**
* realiza um saque na conta dado o valor passado
* @param valor_saque valor a ser sacado
* @return
* @throws Exception Excption caso saldo seja insuficiente
*/
public boolean saca(double valor_saque) throws Exception {
if (this.saldo < valor_saque) {
//return false;
throw new SaldoInsuficienteException(saldo);
}
else {
this.saldo = this.saldo - valor_saque;
return true;
}
}
// public void deposita(double valor_dep) {//use este formato quando a classe filha de RuntimeException
public void deposita(double valor_dep) throws ValorInvalidoException {//use este formato quando a classe filha de Exception
// if (valor_dep > 0) {// neste formato utiliza a exeption do java
// this.saldo += valor_dep;
// }
// else {
// throw new IllegalArgumentException("Você tentou depositar" + " um valor negativo");
// }
if (valor_dep > 0) {// neste formato utiliza a exeption pelo programador
this.saldo += valor_dep;
}
else {
throw new ValorInvalidoException(valor_dep);
}
}
/**
* atualiza nome e numero de conta
*
*/
public void idConta(int numero, String nome) {
this.numero = numero;
this.nome = nome;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((nome == null) ? 0 : nome.hashCode());
result = prime * result + numero;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Conta other = (Conta) obj;
if (nome == null) {
if (other.nome != null)
return false;
} else if (!nome.equals(other.nome))
return false;
if (numero != other.numero)
return false;
return true;
}
public int compareTo(Conta outra) {
if(this.saldo < outra.saldo) {
return -1;
}
if(this.saldo > outra.saldo) {
return 1;
}
return 0;
}
//public void atualiza(double taxa) {
// this.saldo += (this.saldo * taxa);
// };
abstract public void atualiza(double taxa);
}
Fiz a implementação na classe Conta, para atender conta corrente e conta poupança, agi corretamente ?? ```