Está en la página 1de 4

Herencia

A grandes rasgos, el termino herencia significa que una o varias clases pueden derivar de una clase
base o 'padre'. Una clase que hereda de otra se llama subclase. Esta hereda todas los atributos y
métodos de la clase 'padre'. Y además añade sus propias características (atributos y métodos). Por
eso se suele decir que una subclase extiende a la clase base.

El concepto de herencia es el mismo que en el mundo real: hijos heredan características de los
padres. Por lo que una subclase tendrá a su disposición todas los atributos y métodos de la clase
base. Pero esta última (clase base) no podrá utilizar ninguna de las características que extiendan
las clases herederas.

Principales ventajas

1. Si se aplica bien el concepto de herencia conseguiremos una reutilización eficiente del código de
la clase base. Ya que estemos utilizando el mismo código en las dos clases, padre e hijo, pero solo
lo habremos escrito una vez.

2. Una de las principales ventajas de la herencia es la propagación de los cambios realizados en la


clase base. Cualquier cambio que se realice en las clases base será accesible inmediatamente en
las clases heredadas. Siempre cuando la visibilidad introducida lo permita. Sin embargo, hay que
tener cuidado con esta característica. Ya que cambios realizados en las clases base pueden causar
problemas en las clases heredadas que han sido creadas por otras personas. Por lo que hay que
asegurarse que los cambios son compatibles con las clases heredadas. Por ejemplo, podríamos
añadir nuevos atributos y métodos y no modificar los existentes.

3. La herencia es transitiva. Esto significa que una clase puede heredar características de la clase
base que se encuentra niveles más arriba en la jerarquía de herencia. Por ejemplo, si la clase
Cuatrimoto es una subclase de la clase Moto, y la clase Moto es una subclase de la clase Vehículo,
entonces el Cuatrimoto heredará atributos tanto de Moto como de Vehículo.

Clase Padre - Vehiculo

<?php
class Vehiculo {

//Atributos
public $motor = false; // motor encendido o apagado
public $marca;
public $color;

//Metodos
public function estado()
{

public function encender()


{

}
?>
Adicionaremos métodos básicos para la clase Vehículo y su instancia correspondiente

<?php
class Vehiculo {

//Atributos
public $motor; // motor encendido o apagado
public $marca;
public $color;

public function __construct()


{
$this->motor = false; // Al instanciar la clase se define como apagado el motor
}

//Metodos
public function estado()
{
if ( $this->motor == true )
return "El motor esta encendido<br>";
else
return "El motor esta apagado<br>";

public function encender()


{
if ( $this->motor == true) {
return "Cuidado, el motor ya esta encendido<br>";
}else{
$this->motor = true;
return "El motor ahora esta encendido<br>";
}

} // cierre del método encender

} // cierre de la clase

// instancia de la clase
$vehiculo = new Vehiculo();
echo $vehiculo->estado(); // Al instanciar la clase el motor está apagado
echo $vehiculo->encender(); // Se procede con el encendido
echo $vehiculo->estado();// Y el motor cambia de estado a encendido

?>

A continuación, crearemos una clase Moto que heredará todos los atributos y métodos de la clase
Vehículo. Esto lo conseguiremos mediante la sentencia extends.

<?php
class Moto extends Vehiculo {

} // cierre de la clase
?>
En esta clase adicionalmente podremos crear nuevos métodos que estarán disponibles para la
clase Moto y para sus clases herederas, pero que No estarán disponibles para su clase padre
Vehículo.

<?php
class Moto extends Vehiculo {

public function estadoMoto(){ // Nuevo método para moto


$estado = parent::estado(); // Obtenemos el estado de la clase padre
return “El estado de la moto es: ” . $estado; // Modificamos la respuesta
}
} // cierre de la clase
?>

Adicionamos al ejemplo desarrollado:

<?php
class Vehiculo {
//Atributos
public $motor; // motor encendido o apagado
public $marca;
public $color;

public function __construct()


{
$this->motor = false; // Al instanciar la clase se define como apagado el motor
}

//Metodos
public function estado()
{
if ( $this->motor == true )
return "El motor esta encendido<br>";
else
return "El motor esta apagado<br>";
}

public function encender()


{
if ( $this->motor == true) {
return "Cuidado, el motor ya esta encendido<br>";
}else{
$this->motor = true;
return "El motor ahora esta encendido<br>";
}
} // cierre del método encender

} // cierre de la clase

class Moto extends Vehiculo {


public function estadoMoto(){ // Nuevo método para moto
$estado = parent::estado(); // Obtenemos el estado de la clase padre
return "El estado de la moto es: " . $estado; // Modificamos la respuesta
} // cierre del método
} // cierre de la clase
// instancia de la clase
echo "Clase Vehiculo <br>";
$vehiculo = new Vehiculo();
echo $vehiculo->estado(); // Al instanciar la clase el motor está apagado
echo $vehiculo->encender(); // Se procede con el encendido
echo $vehiculo->estado();// Y el motor cambia de estado a encendido

// instancia de la clase Moto


echo "Clase Moto <br>";
$moto = new Moto();
echo $moto->estado(); // En la clase moto podemos usar los métodos de vehiculo
echo $moto->encender(); // procedemos con el método heredado encender()
echo $moto-> estadoMoto();// Y a su vez podemos usar los métodos propios de la clase

?>

También podría gustarte