Извините, но я не вижу связи между инкапсуляцией и наследованием.
Инкапсуляция скрывает вашу внутреннюю реализацию за публично видимым API.
По сути, это разделение между фактической реализацией типа и тем, что он предоставляет.
В широком смысле можно взглянуть даже на человеческое тело и увидеть инкапсуляцию:
Например: вы вдыхаете и выдыхаете воздух, это ваше общедоступное API, но внутренняя часть того, что ваше тело делает с этим воздухом, скрыта внутри вашей дыхательной системы - ваши выпады пропускают кислород в вашу кровь и накапливают из нее углекислый газ. возврат - тем самым изменяя соотношение смеси газов в воздухе, которым вы дышите, но ничего из этого не видно внешнему миру.
Наследование в мире ООП - это способность извлекать конкретный объект и извлекать из него еще более конкретный объект, добавляя при этом возможности (и иногда изменяя существующие возможности посредством переопределения).
Например: A Dog
является разновидностью Mammal
, которая является разновидностью Animal
.
Animal
может содержать такие методы, как Eat()
и такие свойства, как Weight
и Age
.
Mammal
может переопределить метод Eat()
для осуществления сосания грудью (из материнской груди) в младенчестве, но в зависимости от его возраста есть твердую пищу.
Dog
может вводить другую возможность, такую как Bark
.
Все это не имеет ничего общего с инкапсуляцией, как описано в предыдущем абзаце.
Наследование тесно связано с другим основным принципом объектно-ориентированного программирования, называемым Полиморфизм - в основном, возможность ссылаться на производный класс, используя его тип базового класса - возможно, вы (или интервьюер) путаете два
Однако , сегодня я впервые вижу другое определение инкапсуляции (и я работаю с oop-языками уже около двух десятилетий):
Языковая конструкция, которая облегчает связывание данных с методами (или другими функциями), работающими с этими данными.
Под этим
определение, инкапсуляция - это процесс создания капсул - отдельных фрагментов кода, которые содержат данные и способы взаимодействия с ними - типа, классы и т. д., и в некоторой степени связаны с наследованием - для того, чтобы наследовать тип, этот тип сначала необходимо определить.
Однако, на мой взгляд, этого определения недостаточно для определения инкапсуляции. Это может быть частью определения, но не отдельным определением инкапсуляции.