Aplicando herencia en lenguaje Java y PHP
Implementando la Herencia en diferentes lenguajes:
Java: la herencia se define de forma explicita usando la palabra reservada extends
seguida de la Clase padre.
class CarBasic extends Car
Luego de esto hay que crear un método constructor dentro de la Clase hija que coincida con el de la Clase padre. Luego se usa super()
para llamar al método constructor de la Clase padre (súper Clase).
super
hace referencia a la Clase padre, de hecho con super
se puede acceder a los atributos/métodos de la Clase padre usando notación de punto.
Luego se usa this
para pasar el valor de los parámetros a los atributos
public CarBasic(String license, Account driver, String brand; String model) { /* Los parámetros incluyen los del constructor de la clase padre más los parámetros propios de la clase hija */
super(license, driver);
this.brand = brand;
this.model = model;
}
Python: la herencia se define pasando la Clase padre como parámetro al instanciar la Clase Hija.
class Student(Person):
JavaScript: aquí se toma la "clase" hija (prototipo) y la instancia cómo si fuera la "Clase" padre.
student.prototype = new Person();
PHP: se usa la misma sintaxis de Java para definir la herencia.
<?php
require_once('car.php'); /* Importa el archivo que contiene la case padre */
class CarBasic extends Car {
public $brand;
public $model;
}
?>
Luego se declaran los atributos de la Clase hija, después se crea el método constructor. En el caso de PHP en lugar de usar super()
como en Java se usa parent::__construct()
para acceder al constructor de la Clase padre.
Después de esto se puede usar $this
para acceder a los atributos de la Clase y asignarles el valor de los parámetros del método constructor.
public function __construct($license, $driver, $brand, $model) { /* Método Constructor, recibe los parámetros d ela Clase padre junto con los de la Clase hija */
parent::__construct($license, $driver, $brand. $model);
$this->brand = $brand;
$this->model = $model;
}
Para importar e instanciar un objeto la sintaxis sería la siguiente:
<?php
/* Se importa el archivo con la Clase requerida */
require_once('uberX.php');
$uberX = new UberX("DFJ159", new Account("Andrés López", "AND741G779"), "Chrevrolet", "Spark");
$uberX->printDataCar();
?>
En el caso de Python para definir la herencia entre clases primero hay que importar la súper clase.
from car import Car # car → el nombre del archivo que contiene la Clase pero sin extención. Car → El nombre de la Clase que se quiere importar.
Luego se define la herencia usando la siguiente sintaxis:
class UberX(Car): #UberX → (Sub Clase) La clase sobre la que se va a aplicar la herencia. Car → (Súper Clase) La Clase que se va a heredar.
Después se crea el método constructor con los parámetros requeridos para crear el objeto, incluidos los parámetros de la súper Clase. Luego se usa super
para acceder al Método Constructor de la súper Clase y finalmente con self
se acceden a los atributos de sub Clase para asignarles el valor que se pase por parámetro en el método constructor.
def __init__(self, license, driver, brand, model): # Método Constructor con los parámetros para crear el objeto
super.__init__(license, driver)
self.brand = brand
self.model = model
Nota: si al ejecutar el programa aparece un mensaje de error como este: __int__ requires a super object but received a str
hay que hacer el siguiente cambio al acceder al constructor de la súper Clase:
super(UberX, self).__init__(license, driver)
En el caso de JavaScript, si se usa la nueva sintaxis que ofrece EcmaScript 6 se usa extends
para definir la herencia. Luego se crea el constructor y se definen los atributos para crear el objeto.
class UberX extends Car {
constructor(license, driver, brand, model) {
this.brand = brand;
this.model = model;
}
}
Para crear una instancia de un objeto hay que asegurarse de tener el archivo con la súper Clase vinculado en el HTML, después se crea una instancia del objeto en JavaScript con la siguiente sintaxis:
var uberX = new UberX("SXC53", new Account("Felipe Molina", "UISD6JASD6T832"), "Ford", "Focus")