Реализация Интерфейса, но изменение участника, чтобы быть частным

Все члены Интерфейса общедоступны по умолчанию. Но существуют некоторые свойства в моем интерфейсе, что я хочу использоваться в качестве членов парламента, не занимающих официального поста некоторых подклассов, которые реализуют мой интерфейс. Это что-то, что может и делаться или является мной путь от основания здесь. Я работаю над использованием большего количества Интерфейсов в моей архитектуре в эти дни, таким образом, я еще не это хорошо сведущее.

7
задан PositiveGuy 8 July 2010 в 04:08
поделиться

6 ответов

Смысл интерфейсов в том, что они обеспечивают контракт, который другие объекты могут использовать для взаимодействия с вашим объектом. Если вы изменяете член, который объявлен как public в интерфейсе на private, то вы не выполняете контракт - другому объекту может понадобиться прочитать это свойство / вызвать этот метод, и вы должны разрешить ему это.

Интерфейс никогда не будет иметь private членов, поскольку интерфейс предназначен для "взаимодействия" между двумя объектами. Ваши внутренние private члены не имеют для него значения, пока вы выполняете свою часть контракта.

12
ответ дан 6 December 2019 в 10:47
поделиться

Исходя из вашего вопроса и использования слова "subclass", я не думаю, что вы еще полностью поняли интерфейсы.

Я знаю, что вы, вероятно, слышали это миллион раз, но интерфейс описывает, что объект ДЕЛАЕТ, а класс - КАК он это делает. Класс ВЗАИМОДЕЙСТВУЕТ с интерфейсом, он не наследует его.

Поэтому, если хотите, создайте интерфейс для вашего базового класса или для ваших подклассов, но ваш вопрос заставляет меня думать, что вы думаете о базовом классе (абстрактном классе), а не об интерфейсе.

Имеет ли это смысл?

2
ответ дан 6 December 2019 в 10:47
поделиться

Поскольку интерфейс не имеет модификатора доступа, если вы все еще хотите, чтобы ваш метод был приватным в классе, который реализует этот интерфейс, вы можете реализовать этот интерфейс ЭКСПЛИЦИТНО.

В этом случае методы вашего класса будут приватными.

2
ответ дан 6 December 2019 в 10:47
поделиться

Вы должны полностью понимать, что такое интерфейсы. На самом деле это просто описания ожиданий, которые внешний мир может иметь о членах класса. Он не создает члена, он просто сообщает, что у определенного класса есть определенный метод для использования в публичной области видимости. Поэтому, как вы видите, с помощью интерфейса можно описать только публичные члены.

С другой стороны, если вы хотите объявить некоторые закрытые члены, которые являются фиксированными или виртуальными, вы можете использовать классическое наследование с абстрактным базовым классом. В этом случае вы сделаете все методы, которые вы хотите реализовать в подклассах, абстрактными, и реализуете методы, которые вы хотите определить в базовом классе.

Надеюсь, это поможет. С уважением

1
ответ дан 6 December 2019 в 10:47
поделиться

Интерфейсы подходят только для общего доступа. Внутренне было бы странно, если бы объект ссылался на себя через интерфейс.

Если вы хотите иметь частные переменные, которые вы принудительно реализуете, вы хотите использовать абстрактный класс и пометить их как защищенные.

1
ответ дан 6 December 2019 в 10:47
поделиться

Подумайте немного об этом - и вы поймете, что этого нельзя сделать:

Интерфейсы подобны контакту. все публичные поля интерфейса являются частями контакта.

Поэтому их нельзя спрятать в подклассе...
Что произойдет, если кто-то будет преобразовывать объект вашего класса к типу интерфейса?

Вы, вероятно, захотите изменить свой дизайн - может быть, разделить интерфейс на два интерфейса? или интерфейс и абстрактный класс? Нам нужно больше деталей, чтобы знать...

0
ответ дан 6 December 2019 в 10:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: