Menu
Coddy logo textTech

Herencia básica

Parte de la sección Programación Orientada a Objetos del Journey de Dart de Coddy. Lección 36 de 110.

La herencia permite que una clase adquiera las propiedades y métodos de otra clase. En lugar de volver a escribir el mismo código, se crea una nueva clase que se basa en una ya existente. La clase original se llama padre (o superclase), y la nueva clase es la hija (o subclase).

En Dart, usas la palabra clave extends para heredar de una clase padre:

class Animal {
  String name;
  
  Animal(this.name);
  
  void eat() {
    print('$name is eating');
  }
}

class Dog extends Animal {
  Dog(String name) : super(name);
  
  void bark() {
    print('$name says woof!');
  }
}

void main() {
  var dog = Dog('Buddy');
  dog.eat();   // Heredado de Animal
  dog.bark();  // Definido en Dog
}

La clase Dog tiene automáticamente acceso a la propiedad name y al método eat() de Animal, además de su propio método bark(). Esto crea una relación de «es-un»: un Dog es un Animal.

La clase hija puede añadir nuevas propiedades y métodos, pero hereda todo lo público del padre. Ten en cuenta que los miembros privados (aquellos con _) no son accesibles directamente en subclases de diferentes librerías, aunque sigan existiendo en el objeto heredado.

challenge icon

Desafío

Fácil

Construyamos un sistema de vehículos que demuestre cómo la herencia permite que las clases hijas reutilicen y amplíen la funcionalidad de la clase padre. Crearás una clase padre para vehículos generales y una clase hija para un tipo específico de vehículo.

Organizarás tu código en dos archivos:

  • vehicle.dart: Define aquí tus clases:
    • Una clase Vehicle (la clase padre) con una propiedad String brand, un constructor que recibe la marca y un método start() que imprime [brand] engine starting...
    • Una clase Motorcycle que extiende Vehicle. Debe tener una propiedad adicional int cc (cilindrada del motor), un constructor que recibe tanto la marca como cc (pasando la marca a la clase padre mediante super) y su propio método wheelie() que imprime [brand] is doing a wheelie!
  • main.dart: Importa tu archivo de vehículos y demuestra la herencia en acción:
    • Crea un Vehicle con la marca 'Toyota'
    • Llama a su método start()
    • Crea una Motorcycle con la marca 'Harley' y cc 1200
    • Llama al método start() de la motocicleta (heredado de Vehicle)
    • Llama al método wheelie() de la motocicleta (definido en Motorcycle)
    • Imprime Motorcycle engine: [cc]cc para mostrar la propiedad propia de la clase hija

Observa cómo la clase Motorcycle obtiene automáticamente acceso a la propiedad brand y al método start() de Vehicle, además de tener su propia propiedad única cc y su propio método wheelie(). Este es el poder de la herencia: construir sobre código existente.

Salida esperada:

Toyota engine starting...
Harley engine starting...
Harley is doing a wheelie!
Motorcycle engine: 1200cc

Pruébalo tú mismo

import 'vehicle.dart';

void main() {
  // TODO: Crea un Vehicle con brand 'Toyota'
  
  // TODO: Llama al método start() del vehículo
  
  // TODO: Crea una Motorcycle con brand 'Harley' y cc 1200
  
  // TODO: Llama al método start() de la motocicleta (heredado de Vehicle)
  
  // TODO: Llama al método wheelie() de la motocicleta
  
  // TODO: Imprime 'Motorcycle engine: [cc]cc' usando la propiedad cc de la motocicleta
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de Dart online