13
Lesson 13 of 35 ยท OOP

Inheritance

Inheritance allows a class (child/derived) to reuse fields, properties, and methods from another class (parent/base). This lesson covers the : syntax, virtual/override, abstract classes, and the sealed keyword.

Basic Inheritance

Use class Child : Parent syntax. The derived class inherits all public and protected members. Use base() to call the parent constructor.

Inheritance Animals.cs
public class Animal
{
    public string Name { get; }
    public Animal(string name) => Name = name;
    public virtual void Speak() => Console.WriteLine($"{Name} makes a sound.");
}

public class Dog : Animal
{
    public Dog(string name) : base(name) { }
    public override void Speak() => Console.WriteLine($"{Name} barks!");
}

public class Cat : Animal
{
    public Cat(string name) : base(name) { }
    public override void Speak() => Console.WriteLine($"{Name} meows!");
}

Animal[] pets = { new Dog("Rex"), new Cat("Luna"), new Dog("Buddy") };
foreach (var pet in pets)
    pet.Speak();

Abstract Classes

An abstract class cannot be instantiated directly. It can contain abstract methods (no body) that derived classes must override.

Abstract class Shapes.cs
public abstract class Shape
{
    public abstract double Area();
    public abstract double Perimeter();
    public override string ToString()
        => $"{GetType().Name}: Area={Area():F2}, Perimeter={Perimeter():F2}";
}

public class Circle(double radius) : Shape
{
    public override double Area()      => Math.PI * radius * radius;
    public override double Perimeter() => 2 * Math.PI * radius;
}

public class Rectangle(double w, double h) : Shape
{
    public override double Area()      => w * h;
    public override double Perimeter() => 2 * (w + h);
}

Shape[] shapes = { new Circle(5), new Rectangle(4, 6) };
foreach (var s in shapes) Console.WriteLine(s);

sealed Classes

Mark a class sealed to prevent further inheritance. Mark a method sealed override to stop derived classes from overriding it further.