Предположим, что у нас есть два объекта – Door (дверь) и Window (окно). Каждый из них имеет методы Open (открыть) и Close (закрыть):
Class Door
{
private bool isOpened;
public void Open()
{
isOpened=true;
}
public void Close()
{
isOpened=false;
}
}
Точно такой же код содержится в классе Window. Проблема именно в “точно такой же” – при необходимости модифицировать этот код нам придется найти все его вхождения и исправить. Не факт что мы найдем все.
Наследование позволяет, во-первых, избавиться от дублирования кода, вынести его в общее место.
class BaseObject
{
private bool isOpened;
public void Open()
{
isOpened=true;
}
public void Close()
{
isOpened=false;
}
}
class Door : BaseObject
{
// методы Open и Close доступны
// они придут сюда из базового объекта
}
class Window : BaseObject
{
}
Во-вторых, наследование выстраивает логические связи между объектами, облегчая их понимание. Вместо кучи разрозненных классов, мы получаем осмысленную структуру (иерархию классов). Разумеется, эта иерархия должна отражать логические связи, иначе, она будет не понятна. Например, класс Бутылка тоже может иметь методы Открыть и Закрыть, но наследовать его от базового объекта СтроительныеМатериалы, не очень логично.
Класс BaseObject, от которого происходит наследование, называется базовым классом.
Классы Door и Window называются наследниками (потомками) класса BaseObject.
Замечу, что в C++ и многих других языках, можно было реализовать класс, наследующий несколько классов, но в C# такую возможность закрыли. Сделали это специально, т.к. множественное наследование вызывало ошибки.
В C# абсолютно все типы наследуются от специального типа System.Object.
Итак, первые два плюса наследования:
1. Сокращение дублирования кода
2. Создание логических связей между объектами.
Продолжение следует.
No comments:
Post a Comment