¿Puedes hablar sobre los principios de la herencia en la programación orientada a objetos?
sobes.tech AI
Respuesta de la IA
La herencia permite crear una nueva clase (hija o derivada), basada en una clase existente (padre, base o superclase). La clase hija hereda las propiedades (atributos) y métodos de la clase padre, y también puede agregar las suyas propias o sobrescribir las heredadas.
Conceptos principales:
- Ampliación de funcionalidad: Al heredar de la clase padre, la clase hija obtiene funcionalidad básica y puede ampliarla, agregando nuevos métodos o propiedades.
- Sobrescritura de métodos: La clase hija puede cambiar el comportamiento de un método heredado de la clase padre creando un método con el mismo nombre (polimorfismo).
- Reutilización de código: Permite evitar la duplicación de código, ya que la lógica común se define en la clase padre.
- Relación "es": La herencia modela la relación "es un" (is-a). Por ejemplo, "Un gato es un animal".
<?php
class Animal {
protected $name;
public function __construct($name) {
$this->name = $name;
}
public function speak() {
echo "Sonido desconocido\n";
}
}
class Dog extends Animal {
public function speak() {
echo "¡Guau-guau!\n";
}
}
class Cat extends Animal {
public function speak() {
echo "¡Miau-miau!\n";
}
}
$dog = new Dog("Bobby");
$dog->speak(); // Salida: ¡Guau-guau!
$cat = new Cat("Murka");
$cat->speak(); // Salida: ¡Miau-miau!
?>
En PHP, la herencia se realiza con la palabra clave extends. Una clase puede heredar solo de una clase (herencia simple), pero puede implementar múltiples interfaces.
El acceso a las propiedades y métodos de la clase padre desde la hija es posible usando la palabra clave parent::.
<?php
class ParentClass {
protected $value = "valor del padre";
public function showValue() {
echo $this->value . "\n";
}
}
class ChildClass extends ParentClass {
// Sobrescribir la propiedad
protected $value = "valor de la hija";
public function showValues() {
// Llamada al método de la clase padre
parent::showValue();
// Mostrar el valor de la clase hija
echo $this->value . "\n";
}
}
$obj = new ChildClass();
$obj->showValues();
// Salida:
// valor del padre
// valor de la hija
?>
Modificadores de acceso clave:
public: Accesible desde cualquier lugar.protected: Accesible dentro de la clase y en las clases heredadas.private: Solo accesible dentro de la clase.
Los métodos pueden ser declarados final, lo que impide su sobrescritura en clases hijas. Las clases también pueden ser final, lo que impide su herencia. Pueden ser abstract, lo que requiere su implementación en clases hijas.