1
<?php
declare(strict_types=1);
// 1. Superclase Padre
class Vehiculo
{
public function __construct(
protected string $marca,
protected string $modelo,
protected int $anio,
protected int $velocidad = 0
) {}
public function acelerar(int $kmh): void
{
$this->velocidad += $kmh;
echo "<p style='color:#0284c7;'>🏎️ {$this->marca} {$this->modelo} aceleró a {$this->velocidad} km/h.</p>";
}
public function frenar(): void
{
$this->velocidad = 0;
echo "<p style='color:#ef4444;'>🛑 {$this->marca} {$this->modelo} se ha detenido por completo.</p>";
}
public function getDescripcion(): string
{
return "{$this->marca} {$this->modelo} ({$this->anio})";
}
}
// 2. Subclase Hija con Especialización
final class AutoElectrico extends Vehiculo
{
public function __construct(
string $marca,
string $modelo,
int $anio,
private int $porcentajeBateria = 100 // Propiedad exclusiva del auto eléctrico
) {
// Invocar el constructor del padre
parent::__construct($marca, $modelo, $anio);
}
// Método exclusivo de la hija
public function cargarBateria(int $porcentaje): void
{
$this->porcentajeBateria = min(100, $this->porcentajeBateria + $porcentaje);
echo "<p style='color:#10b981;'>⚡ Batería cargada al {$this->porcentajeBateria}%.</p>";
}
// Sobrescritura de método (Override)
public function getDescripcion(): string
{
return parent::getDescripcion() . " [100% Eléctrico - Batería: {$this->porcentajeBateria}%]";
}
}
// ==========================================
// PRUEBA DE HERENCIA EN VIVO
// ==========================================
$autoGasolina = new Vehiculo("Toyota", "Corolla", 2022);
$tesla = new AutoElectrico("Tesla", "Model 3", 2024, 75);
echo "<h3>1. Vehículo Estándar:</h3>";
echo "<p>" . $autoGasolina->getDescripcion() . "</p>";
$autoGasolina->acelerar(60);
echo "<h3>2. Auto Eléctrico (Hereda acelerar y agrega batería):</h3>";
echo "<p>" . $tesla->getDescripcion() . "</p>";
$tesla->acelerar(90); // Método heredado del padre
$tesla->cargarBateria(25); // Método propio especializado
Haz clic para editar este código