Ваше недоразумение происходит от того, что подразумевается под "скрыть информацию".Кто бы ни слышал об этом, он имел в виду, что реализация интерфейса позволяет классу отделить свои обращенные вперед методы от его внутренних реализаций.
Это также называется «инкапсуляцией», и преимущество в том, чтоРазработчик может изменить внутренние механизмы объекта, не нарушая существующий код, который был написан вокруг его открытого интерфейса, что облегчает изменение вещей.Таким образом, вы часто будете слышать интерфейсы, описываемые как «контракт», потому что он создает неявное соглашение между пользователями и разработчиками класса о том, что его методы, обращенные вперед, будут оставаться согласованными.И поскольку несколько классов могут реализовывать один интерфейс, один компонент может быть легко заменен другим, если он реализует один и тот же открытый интерфейс.Грэди Буч, автор уважаемой книги по объектно-ориентированному дизайну, определяет инкапсуляцию следующим образом:
процесс выделения элементов абстракции, составляющих его структуру и поведение;инкапсуляция служит для разделения договорного интерфейса абстракции и его реализации.
Нет необходимости, чтобы потребитель объекта знал или подвергался воздействию того, как разработчик этого объекта реализовал свою функциональность в соответствии сохватывает.Подумайте о своей микроволновке: все, что вам нужно сделать, чтобы приготовить закуску, - это нажать несколько кнопок на передней панели.Это открытый интерфейс вашей микроволновой печи.Не нужно понимать научные принципы, лежащие в основе его дизайна, просто чтобы сделать пакет из попкорна.Преимущество интерфейсов в том, что они уменьшают сложность и упрощают использование ваших классов другими разработчиками.
Итак, возвращаясь к примеру, приведенному в вашем вопросе, вы не должны быть ограничены.от использования класса Person
, но вы можете быть ограничены в методах, предоставляемых этим классом, к которым у вас есть доступ.Например, класс Person
может хранить имена людей внутри себя в отдельных полях FirstName
и LastName
, но только публично раскрывать одно свойство Name
, которое возвращает объединение обоих этих полей частных имен.
Но объектно-ориентированный дизайн и терминология довольно сложны.Я настоятельно рекомендую вам найти хорошую книгу о концепциях и внимательно ее прочитать.Благодаря этому вы станете лучшим программистом.