Menu
Coddy logo textTech

Sintaxis básica de herencia (:)

Parte de la sección Programación Orientada a Objetos del Journey de C# de Coddy — lección 19 de 70.

La herencia permite que una clase adquiera las propiedades y los métodos de otra clase. En lugar de reescribir el mismo código, se crea una clase base (padre) con funcionalidad compartida y, a continuación, se crean clases derivadas (hijas) que heredan de ella.

En C#, se utiliza el símbolo de dos puntos : para indicar herencia:

public class Animal
{
    public string Name { get; set; }
    
    public void Eat()
    {
        Console.WriteLine($"{Name} is eating.");
    }
}

public class Dog : Animal
{
    public void Bark()
    {
        Console.WriteLine($"{Name} says Woof!");
    }
}

La clase Dog hereda todo de Animal. Tiene acceso a la propiedad Name y al método Eat() sin declararlos de nuevo, además de que añade su propio método Bark():

Dog myDog = new Dog();
myDog.Name = "Buddy";
myDog.Eat();   // Salida: Buddy está comiendo.
myDog.Bark();  // Salida: Buddy dice ¡Guau!

C# admite únicamente la herencia simple, lo que significa que una clase solo puede heredar de una única clase base. Sin embargo, se pueden construir cadenas de herencia en las que una clase derivada se convierte en la base de otra clase. Esto crea una jerarquía que modela relaciones del mundo real mientras mantiene el código organizado y reutilizable.

challenge icon

Desafío

Fácil

Vamos a construir una jerarquía de vehículos que demuestre cómo la herencia permite que las clases derivadas compartan la funcionalidad de una clase base mientras agregan sus propios comportamientos únicos.

Crearás tres archivos para organizar tu código:

  • Vehicle.cs: Define una clase Vehicle en el espacio de nombres Transport. Esta será tu clase base que todos los vehículos comparten. Debe tener una propiedad Brand (string) y una propiedad Year (int), junto con un método StartEngine() que imprima "{Brand} engine started."
  • Car.cs: Define una clase Car en el espacio de nombres Transport que herede de Vehicle. El coche añade su propia propiedad NumberOfDoors (int) y un método Honk() que imprima "{Brand} goes Beep Beep!"
  • Program.cs: En tu archivo principal, crea una instancia de Car utilizando valores de entrada. Establece sus propiedades (incluidas las heredadas), luego demuestra que el coche puede usar tanto sus propios métodos como los métodos que heredó de Vehicle.

Recibirás tres entradas:

  • Nombre de la marca (Brand)
  • Año (Year)
  • Número de puertas (Number of doors)

Imprime la información del coche y demuestra sus capacidades en este formato:

Car: {Brand} ({Year})
Doors: {NumberOfDoors}
{StartEngine output}
{Honk output}

Por ejemplo, si las entradas son Toyota, 2022, y 4, la salida debería ser:

Car: Toyota (2022)
Doors: 4
Toyota engine started.
Toyota goes Beep Beep!

Observa cómo tu Car puede acceder a la propiedad Brand y al método StartEngine() a pesar de que están definidos en Vehicle. ¡Ese es el poder de la herencia: la clase derivada obtiene automáticamente todo de su clase base!

Hoja de referencia

La herencia permite que una clase adquiera propiedades y métodos de otra clase utilizando el símbolo de dos puntos ::

public class Animal
{
    public string Name { get; set; }
    
    public void Eat()
    {
        Console.WriteLine($"{Name} is eating.");
    }
}

public class Dog : Animal
{
    public void Bark()
    {
        Console.WriteLine($"{Name} says Woof!");
    }
}

La clase derivada (Dog) hereda todas las propiedades y métodos de la clase base (Animal) y puede añadir los suyos propios:

Dog myDog = new Dog();
myDog.Name = "Buddy";
myDog.Eat();   // Método heredado
myDog.Bark();  // Método propio

C# solo admite la herencia simple: una clase solo puede heredar de una única clase base. Sin embargo, se pueden crear cadenas de herencia para construir jerarquías.

Pruébalo tú mismo

using System;
using Transport;

class Program
{
    public static void Main(string[] args)
    {
        // Leer entrada
        string brand = Console.ReadLine();
        int year = Convert.ToInt32(Console.ReadLine());
        int doors = Convert.ToInt32(Console.ReadLine());
        
        // TODO: Crear una instancia de Car
        
        // TODO: Establecer las propiedades del coche (Brand, Year, NumberOfDoors)
        
        // TODO: Imprimir la información del coche en el formato requerido:
        // Car: {Brand} ({Year})
        // Doors: {NumberOfDoors}
        // Luego llamar a StartEngine() y Honk()
    }
}
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