← Todos los tutoriales
language-deep-dive 7 min

Herencia de Clases

La herencia permite que una clase se construya sobre otra. El hijo obtiene automáticamente todas las propiedades y métodos del padre, puede añadir los suyos y puede llamar al constructor del padre con base(). Úsala cuando dos cosas genuinamente comparten estructura — no solo para reutilizar código.

Una clase padre y una hija que la extiende:

class Animal\n    string name\n    string sound\n\n    constructor(string n, string s)\n        name = n\n        sound = s\n\n    string speak()\n        return name + " says " + sound + "!"\n\nclass Dog is Animal\n    string breed\n\n    constructor(string n, string b)\n        base(n, "Woof")\n        breed = b\n\n    string describe()\n        return name + " is a " + breed\n\nstart:\n    Animal cat = Animal("Whiskers", "Meow")\n    Dog dog = Dog("Rex", "Labrador")\n\n    print(cat.speak())\n    print(dog.speak())\n    print(dog.describe())
Whiskers says Meow!\nRex says Woof!\nRex is a Labrador

Dog hereda de Animal con class Dog is Animal. base(n, "Woof") llama al constructor de Animal con el nombre de Rex y un sonido prefijado. Dog hereda automáticamente speak() y accede a la propiedad name — sin necesidad de redeclararla. Dog agrega su propia propiedad breed y el método describe().

Una clase hija puede sobreescribir un método del padre definiendo su propia versión con el mismo nombre:

class Shape\n    string color\n\n    constructor(string c)\n        color = c\n\n    string info()\n        return "A " + color + " shape"\n\nclass Circle is Shape\n    number radius\n\n    constructor(string c, number r)\n        base(c)\n        radius = r\n\n    number area()\n        return 3.14159 * radius * radius\n\n    string info()\n        return "A " + color + " circle, radius " + radius.toString() + ", area " + area().toString()\n\nstart:\n    Shape s = Shape("grey")\n    Circle c = Circle("red", 5.0)\n\n    print(s.info())\n    print(c.info())
A grey shape\nA red circle, radius 5.0, area 78.53975

Circle define su propio método info(), que reemplaza la versión del padre para instancias de Circle. La propiedad color de Shape es accesible en Circle sin redeclaración. Esto es sobreescritura de métodos — la hija proporciona una versión más específica del comportamiento del padre.

Resumen rápido

  • class Hija is Padre declara herencia — Hija obtiene todas las propiedades y métodos de Padre
  • base(args) llama al constructor del padre — úsalo para inicializar las propiedades del padre
  • Las clases hijas acceden a las propiedades del padre por nombre directamente — sin redeclaración
  • Define un método con el mismo nombre que un método del padre para sobreescribirlo
¡Copiado!