Наследование — один из важнейших принципов объектно-ориентированного программирования. Оно позволяет одному классу (наследнику) унаследовать поля, методы и другие характеристики другого класса (базового класса).
Создание базового класса
Создадим класс Animal, представляющий животное. Добавим свойство Name:
public class Animal
{
public string Name { get; set; }
}
Создание наследника
Создадим класс Dog, наследник класса Animal. Animal описывает общие характеристики животных (имя, скорость, вес и т.д.), которые наследуются Dog.
Для наследования используем двоеточие:
public class Dog : Animal
Теперь Dog наследует все из Animal. Можно создать объект Dog и обратиться к свойству Name унаследованному от Animal:
Dog tom = new Dog();
tom.Name = "Tom";
Это работает, поскольку Dog унаследовал поля и методы базового класса.
Модификаторы доступа
Модификаторы доступа определяют видимость членов класса:
- public: Видно везде.
- private: Видно только внутри класса.
- protected: Видно внутри класса и его наследников.
Например, если поле объявлено как private, наследник не сможет к нему обратиться. protected обеспечивает доступ наследникам. Для доступа из наследников обычно используется public.
public class Animal
{
public string Name { get; set; }
protected int Speed { get; set; } // Доступно в Animal и Dog
private int Weight { get; set; } // Доступно только в Animal
public void SomeMethod()
{
Console.WriteLine(Name); // Доступно
Console.WriteLine(Speed); // Доступно
Console.WriteLine(Weight); // Доступно
}
}
Наследование конструкторов
Конструкторы задают начальные значения при создании объекта. Можно наследовать конструкторы базового класса.
Создадим конструктор для Dog, принимающий скорость и имя:
public class Dog : Animal
{
public int Speed { get; set; }
public Dog(int speed, string name) : base(name)
{
Speed = speed;
}
}
base(name) вызывает базовый конструктор Animal, передавая ему name.
Dog jerry = new Dog(23, "Jerry");
Console.WriteLine(jerry.Speed); // Выведет 23
Console.WriteLine(jerry.Name); // Выведет Jerry
Конструкторы также должны иметь модификаторы доступа (public).
Наследование методов
Добавим метод в базовый класс и вызовем его из наследника:
public class Animal
{
// ...
public void PrintName()
{
Console.WriteLine(Name);
}
}
public class Dog : Animal
{
// ...
}
jerry.PrintName(); // Выведет "Jerry"
Dog наследует метод PrintName из Animal.
Наследование — мощный инструмент ООП, позволяющий создавать иерархию классов и повторно использовать код. Правильное использование модификаторов доступа и наследование конструкторов ведут к чистому и эффективному коду.