private, public, protected как модификаторы для наследования

После изучения модификаторов доступа внутри класса и простого наследования нужно понять принципы модификаторов доступа при наследовании. Модификаторы доступа public, private и protected применяются как внутри класса, так и к самому классу при наследовании. Вот об этих применяемых к классу модификаторах в этой статье и написано.
Для начала попробуйте понять таблицу:

public наследование
private наследование
protected наследование

сlass A
{
private: int x;
public: int y;
protected: int z;
};
сlass B как потомок A
{
private: int x;
public: int y;
protected: int z;
};
сlass C как потомок B
{
private: int x;
public: int y;
protected: int z;
};

сlass A
{
private: int x;
public: int y;
protected: int z;
};

сlass B как потомок А
{
private: int x;
public: int y;
protected: int z;
};
сlass C как потомок B
{
private: int x;
public: int y;
protected: int z;
};

сlass A
{
private: int x;
public: int y;
protected: int z;
};

сlass B как потомок A
{
private: int x;
public: int y;
protected: int z;
};
сlass C как потомок B
{
private: int x;
public: int y;
protected: int z;
};

Зачёркнутое в таблице не обозначает, что оно не наследуется, но обозначает, что модификатором доступа прямой контакт из наследника к такой части закрыт.
Используя public-наследование мы передаем потомкам всё, что есть в основном классе, в таком виде, как и записано в основном классе. Получаем клон основного класса. Разница в том, что элементы основного класса к элементам своего клона отношения не имеют. Это отображает листинг #1:

Используя private-наследование можно создать первого потомка, от которого дальнейшее наследование будет бессмысленно. Если первый потомок получает возможность работы с некоторыми элементами, переданными по механизму наследования, то потомки первого потомка таких возможностей не получают. Кроме того, потомки первого потомка даже лишены возможности узнавать, кто их первый родитель. Предполагается, что потомки класса B не должны даже знать о существовании класса A (либо потомков класса B вообще не должно быть). Это отображается в листинге #2. (Примечание: Под первым потомком подразумевается потомок первого уровня. Таких потомков может быть сколько угодно)

Использованием protected-наследования программистом предполагается, что внутри всех потомков и потомков потомков и потомков потомков потомков будут использоваться только такие элементы, передаваемые механизмом наследования, которые будут защищены от влияния на себя извне своих классов. Это отображается в листинге #3:

7 комментариев на «“private, public, protected как модификаторы для наследования”»

  1. Очень хорошая статья. Автору большое спасибо

  2. Александр:

    Спасибо.
    Ссылку поправь на «Знакомство с protected (модификатор доступа внутри класса)»

  3. Anonim:

    Сижу разбираюсь в этой теме, смутила фраза «Нельзя обратиться к private элементу унаследованному от родителя».
    Пришёл к выводу, что можно, если обратиться к нему через унаследованную аксессорную функцию 🙂

    • Давайте пример, что ли. Пример -то понагляднее будет чем выбрасывание терминов типа: «аксессорные функции»

      • Anonim:

        Ну как-то так:

        На экране будет:
        i=777
        j=666

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/key-horstmann/scala-dlya-neterpelivyh-2/?lfrom=15589587

Последние комментарии

Яндекс.Метрика