La herencia es un concepto fundamental en la programación orientada a objetos (OOP) que permite a una clase derivar propiedades y métodos de otra clase. En Dart, la herencia se utiliza para crear una jerarquía de clases que comparten características comunes, lo que facilita la reutilización del código y la organización lógica de las clases.
Conceptos Clave
- Clase Base (Superclase): La clase de la cual se heredan propiedades y métodos.
- Clase Derivada (Subclase): La clase que hereda propiedades y métodos de la clase base.
- Palabra Clave
extends: Utilizada para indicar que una clase está heredando de otra clase.
Ejemplo Básico de Herencia
Vamos a crear un ejemplo simple para ilustrar cómo funciona la herencia en Dart.
Clase Base
class Animal {
String name;
Animal(this.name);
void makeSound() {
print('$name hace un sonido.');
}
}Clase Derivada
class Dog extends Animal {
Dog(String name) : super(name);
@override
void makeSound() {
print('$name ladra.');
}
}Uso de las Clases
void main() {
Animal animal = Animal('Animal');
animal.makeSound(); // Salida: Animal hace un sonido.
Dog dog = Dog('Rex');
dog.makeSound(); // Salida: Rex ladra.
}Explicación del Código
-
Clase
Animal:- Tiene un constructor que inicializa el nombre del animal.
- Tiene un método
makeSoundque imprime un mensaje genérico.
-
Clase
Dog:- Extiende la clase
Animalusando la palabra claveextends. - Llama al constructor de la clase base usando
super(name). - Sobrescribe el método
makeSoundpara proporcionar una implementación específica para los perros.
- Extiende la clase
Ejercicio Práctico
Ejercicio 1: Crear una Jerarquía de Clases
-
Crea una clase base llamada
Vehiclecon las siguientes propiedades y métodos:- Propiedad
String brand. - Método
void honk()que imprime"<brand> hace un sonido de bocina.".
- Propiedad
-
Crea una clase derivada llamada
Carque extiendaVehicley sobrescriba el métodohonk()para imprimir"<brand> hace un sonido de bocina de coche.".
Solución
class Vehicle {
String brand;
Vehicle(this.brand);
void honk() {
print('$brand hace un sonido de bocina.');
}
}
class Car extends Vehicle {
Car(String brand) : super(brand);
@override
void honk() {
print('$brand hace un sonido de bocina de coche.');
}
}
void main() {
Vehicle vehicle = Vehicle('Vehículo');
vehicle.honk(); // Salida: Vehículo hace un sonido de bocina.
Car car = Car('Toyota');
car.honk(); // Salida: Toyota hace un sonido de bocina de coche.
}Errores Comunes y Consejos
-
Olvidar Llamar al Constructor de la Superclase:
- Asegúrate de llamar al constructor de la superclase usando
super()en el constructor de la subclase.
- Asegúrate de llamar al constructor de la superclase usando
-
No Sobrescribir Métodos Correctamente:
- Usa la anotación
@overridepara asegurarte de que estás sobrescribiendo un método existente en la superclase.
- Usa la anotación
-
Acceso a Propiedades Privadas:
- Las propiedades privadas (que comienzan con
_) en la superclase no son accesibles directamente en la subclase.
- Las propiedades privadas (que comienzan con
Conclusión
La herencia es una herramienta poderosa en Dart que permite la reutilización del código y la creación de jerarquías de clases lógicas. Al entender cómo funciona la herencia y cómo implementarla correctamente, puedes crear aplicaciones más organizadas y mantenibles. En el próximo tema, exploraremos los mixins, que proporcionan una forma alternativa de compartir código entre clases.
Curso de Programación en Dart
Módulo 1: Introducción a Dart
- Introducción a Dart
- Configuración del Entorno de Desarrollo
- Tu Primer Programa en Dart
- Sintaxis y Estructura Básica
