// ✔ Classe abstrata ✔ Herança ✔ Polimorfismo ✔ Encapsulamento ✔ Métodos sobrescritos (@Override)
// 🧭 FASE 1 — ESCOPO (MVP)
// 🎯 Funcionalidades iniciais ✔ Criar clientes ✔ Criar contas bancária ✔ Tipos de conta:
// Conta Corrente Conta Poupança
// ✔ Operações: Depósito Saque Transferência entre contas Consulta de saldo
// ✔ Extrato simples no console

// 🧩 FASE 2 — MODELAGEM DAS CLASSES

// Cliente
class Cliente {
    private String nome;
    private String cpf;

    public Cliente(String nome, String cpf) {
        this.nome = nome;
        this.cpf = cpf;
    }

    public String getNome() {
        return nome;
    }
}

// Conta (ABSTRATA)
abstract class Conta {

    protected int numero;
    protected Cliente cliente;
    protected double saldo;

    public Conta(int numero, Cliente cliente) {
        this.numero = numero;
        this.cliente = cliente;
        this.saldo = 0.0;
    }

    public void depositar(double valor) {
        if (valor > 0) {
            saldo += valor;
        }
    }

    public void sacar(double valor) {
        if (valor > 0 && saldo >= valor) {
            saldo -= valor;
        }
    }

    public void transferir(double valor, Conta destino) {
        if (saldo >= valor) {
            this.sacar(valor);
            destino.depositar(valor);
        }
    }

    public abstract void imprimirExtrato();
}

// ContaCorrente
class ContaCorrente extends Conta {

    public ContaCorrente(int numero, Cliente cliente) {
        super(numero, cliente);
    }

    @Override
    public void imprimirExtrato() {
        System.out.println("=== Extrato Conta Corrente ===");
        System.out.println("Cliente: " + cliente.getNome());
        System.out.println("Saldo: R$ " + String.format("%.2f", saldo));
    }
}

// ContaPoupanca
class ContaPoupanca extends Conta {

    public ContaPoupanca(int numero, Cliente cliente) {
        super(numero, cliente);
    }

    @Override
    public void imprimirExtrato() {
        System.out.println("=== Extrato Conta Poupança ===");
        System.out.println("Cliente: " + cliente.getNome());
        System.out.println("Saldo: R$ " + String.format("%.2f", saldo));
    }
}

// ▶️ FASE 3 — MAIN (SIMULAÇÃO DO BANCO)
public class Main {
    public static void main(String[] args) {

        Cliente cliente1 = new Cliente("João Victor", "123.456.789-00");

        Conta cc = new ContaCorrente(1, cliente1);
        Conta cp = new ContaPoupanca(2, cliente1);

        cc.depositar(1000);
        cc.transferir(250, cp);

        cc.imprimirExtrato();
        cp.imprimirExtrato();
    }
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: