Я прочитал много статей, «Интерфейс - это контракт класса». Класс, имеющий конфиденциальную, защищенную и общедоступную видимость, тогда почему интерфейс объявляет только публичные методы.Интерфейс не может объявлять частные/защищенные функции
ответ
Интерфейс описывает, как взаимодействовать с объектом (общедоступные методы).
Интерфейс не должен ничего знать о структуре внутренних объектов (частные или защищенные методы).
и интерфейс не заботятся о том, что происходит под капотом объекта.
Также частные и защищенные методы могут варьироваться в зависимости от реализации на низком уровне.
Например, мы имеем интерфейс SocialMedia
interface SocialMedia
{
public function share();
}
И внутри этого раздела мы не заботимся (и не должны заботиться) о том, как именно объект будет обмениваться информацией, мы знаем только, что информация будет общий.
А также у нас есть 2 класса:
class Twitter implements SocialMedia
{
private function tweet()
{
}
public function share()
{
return $this->tweet();
}
}
class Facebook implements SocialMedia
{
private function post()
{
}
public function share()
{
return $this->post();
}
}
Как вы можете видеть эти классы реализует SocialMedia
и мы знаем, как взаимодействовать с ними - именно это намерение интерфейса.
Также у нас есть частные методы tweet
для классов Twitter
и post
для Facebook
Эти методы представляют собой реализацию низкого уровня внутри определенного класса, поэтому мы не можем описывать такие методы внутри интерфейса.
+1 Итак, вы используете 'share' как get-method для вывода частного свойства/метода. Я всегда использовал интерфейсы по семантическим причинам. – Thielicious
- Доступный в любом месте (Другие классы, экземпляры объекта);
Защищено - Доступно только в классах, которые продлить текущий класс;
- Доступно только в категории класс;
Интерфейс должно означать «то, что вы можете видеть из вне класса». Не имеет смысла добавлять непубличные методы.
- 1. Зачем объявлять интерфейс внутри интерфейса?
- 2. Динамически объявлять имя функции?
- 3. Почему интерфейс позволяет объявлять состояния в интерфейсе?
- 4. Почему мы должны объявлять интерфейс внутри класса?
- 5. интерфейс не может определять типов
- 6. Зачем объявлять аргумент функции окончательным?
- 7. Объявлять класс для регулярной функции
- 8. Объявлять функции в ASP.NET WebPages
- 9. C++: зачем объявлять частные функции?
- 10. не может сократить интерфейс
- 11. Зачем объявлять функции прототипа вне наследуемого объекта?
- 12. Почему всегда объявлять функции в JavaScript?
- 13. Почему java предоставляет возможность объявлять интерфейс внутри интерфейса
- 14. TimerTask не может обновить интерфейс?
- 15. машинопись не может реализовать интерфейс
- 16. Hibernate не может разворачивать интерфейс
- 17. Интерфейсы не могут объявлять типы
- 18. Имеет ли смысл объявлять встроенные функции noexcept?
- 19. Объявлять статические функции как функцию друга?
- 20. Динамически объявлять календари System.Globalization в функции?
- 21. Вам нужно объявлять функции в C?
- 22. Golang json декодирование не может декодировать интерфейс {}
- 23. Mocking objects - объявлять все методы как виртуальные или использовать интерфейс?
- 24. g ++ 2.9-gnupro-98r2, ошибка: не может объявлять ссылки на функции; используйте указатель на функцию вместо
- 25. MPMediaPickerController не может объявлять элементы управления с помощью VoiceOver
- 26. Не может объявлять переменные после того, как цикл в VS2012
- 27. ES6: конструктор не может объявлять как функцию стрелки?
- 28. Ошибка не может объявлять член экземпляра в статическом классе
- 29. Должен ли я объявлять прототип функции для каждой функции?
- 30. Общая реализация функции Интерфейс
Он определяет интерфейс, который всегда является общедоступным. Как все работает внутри, не имеет значения. –
Возможный дубликат [Возможно ли иметь интерфейс с частными/защищенными методами?] (Https://stackoverflow.com/questions/1876516/is-it-possible-to-have-an-interface-that-has -private-protected-methods) – Duncanmoo