Fácil PHP
Conta bancária com herança
Enunciado
Crie uma classe Conta com o método sacar(float $valor): void que apenas exibe uma mensagem. Depois, crie ContaCorrente extends Conta que sobrescreve sacar para exibir a mensagem com uma taxa de 1% sobre o valor. Instancie e chame sacar(100).
Requisitos
Contadeve ter um métodosacarque recebe um valor e imprime algo.ContaCorrentedeve estenderContae sobrescreversacar.- A saída deve mostrar o valor original e a taxa de 1%.
Código inicial
<?php
class Conta {
public function sacar(float $valor): void {
// implemente
}
}
class ContaCorrente extends Conta {
// sobrescreva o método
}
$c = new ContaCorrente();
$c->sacar(100);
Saída esperada
Saque de R$ 100.00 | Taxa: R$ 1.00
Ver dica
Use parent::sacar($valor) para reaproveitar o comportamento base e depois adicione a taxa.
Mostrar solução
<?php
declare(strict_types=1);
class Conta
{
public function sacar(float $valor): void
{
echo "Saque de R$ " . number_format($valor, 2) . PHP_EOL;
}
}
class ContaCorrente extends Conta
{
public function sacar(float $valor): void
{
parent::sacar($valor); // executa o saque padrão
$taxa = $valor * 0.01;
echo "Taxa: R$ " . number_format($taxa, 2) . PHP_EOL;
}
}
$c = new ContaCorrente();
$c->sacar(100);
Passo a passo
- Definimos
Contacom o métodosacar, que apenas imprime o valor sacado. ContaCorrenteusaextends Contapara herdar esse comportamento.- Sobrescrevemos
sacaremContaCorrente. - Dentro do novo método, chamamos
parent::sacar($valor)para não duplicar a lógica de exibição. - Calculamos a taxa de 1% e exibimos o valor formatado.
- Instanciamos
ContaCorrentee chamamossacar(100).
Por que funciona
A herança permite que ContaCorrente reutilize o método sacar da classe pai através de parent::. Ao sobrescrever, mantemos o comportamento base e adicionamos a regra específica da conta corrente. Isso evita repetição de código e segue o princípio de especialização.
Erros comuns
- Esquecer de chamar
parent::sacar($valor): a mensagem base não aparece, apenas a taxa. - Declarar
sacarcom assinatura diferente (ex.: semfloat): o PHP pode emitir aviso de compatibilidade. - Não formatar o valor:
number_formatgarante duas casas decimais.
Outra forma de resolver
Sobrescrever completamente sem chamar parent::, mas aí você duplicaria a lógica de exibição do valor.
Saída esperada
Saque de R$ 100.00
Taxa: R$ 1.00