Наследование (программирование)

Насле́дование — один из 3 важнейших механизмов объектно-ориентированного программирования (наряду с инкапсуляцией и полиморфизмом), позволяющий создать новый объект на основе уже существующего объекта, при этом данные и функциональность существующего объекта «наследуются» новым объектом.

Содержание

Наследование в языке C++

«Наследование» в C++:

class A{    //базовый класс
};

class B : public A{    //public наследование
}

class C : protected A{    //protected наследование
}

class Z : private A{    //private наследование
}
 

Класс, от которого произошло наследование, называется «базовым». Классы, которые произошли от базового, называются «потомками» или «наследниками».

В C++ существует три типа наследования: public, protected, private. Спецификаторы доступа членов базового класса меняются в потомках следующим образом:

  • при public-наследовании все спецификаторы остаются без изменения.
  • при protected-наследовании все спецификаторы остаются без изменения, кроме спецификатора public, который меняется на спецификатор protected (то есть public-члены базового класса в потомках становятся protected).
  • при private-наследовании все спецификаторы меняются на private.

Одним из основных преимуществ наследования является то, что указатель на классы—наследники может быть неявно преобразован в указатель на базовый класс, то есть для примера выше, можно написать

A* a = new B;

Эта интересная особенность открывает возможность динамической идентификации типа.

Наследование в языке Delphi

Для использования механизма наследования в Delphi необходимо, в объявлении класса, справа от слова class указать класс предок:

Предок:

 TAncestor = class
 private
 protected
 public
   {Виртуальная процедура.} 
   procedure VirtualProcedure; virtual; abstract; 
   procedure StaticProcedure;
 end;

Наследник:

 TDescendant = class(TAncestor)
 private
 protected
 public
    {Перекрытие виртуальной процедуры.}
   procedure VirtualProcedure; override;
   procedure StaticProcedure;
 end;

Абсолютно все классы в Delphi являются потомками класса TObject. Если справа от слова class предок не указан, то подразумевается, что этот класс потомок класса TObject.

Типы наследования

Просто наследование

Множественное наследование

При множественном наследовании у класса может быть более одного предка. В этом случае класс наследует методы всех предков. Достоинства такого подхода в большей гибкости.

Множественное наследование реализовано в C++. Множественное наследование — потенциальный источник ошибок, которые могут возникнуть из-за наличия одинаковых имен методов в предках. В языках, которые позиционируются как наследники C++ (Java, C# и др.), от множественного наследования было решено отказаться в пользу интерфейсов. Множественное наследование поддерживается в языке UML.

Большинство современных объектно-ориентированных языков программирования (C#, Java, Delphi и др.) поддерживает возможность одновременно наследоваться от класса-предка и реализовать методы нескольких интерфейсов одним классом. Этот механизм позволяет во многом заменить множественное наследование — методы интерфейсов необходимо переопределять явно, что исключает ошибки при наследовании функциональности одинаковых методов различных классов-предков.

Многоуровневое наследование

См. также

Ссылки

 
Начальная страница  » 
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 Home