2016-09-28 2 views
1

Я прочитал много статей, «Интерфейс - это контракт класса». Класс, имеющий конфиденциальную, защищенную и общедоступную видимость, тогда почему интерфейс объявляет только публичные методы.Интерфейс не может объявлять частные/защищенные функции

+2

Он определяет интерфейс, который всегда является общедоступным. Как все работает внутри, не имеет значения. –

+0

Возможный дубликат [Возможно ли иметь интерфейс с частными/защищенными методами?] (Https://stackoverflow.com/questions/1876516/is-it-possible-to-have-an-interface-that-has -private-protected-methods) – Duncanmoo

ответ

2

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

Также частные и защищенные методы могут варьироваться в зависимости от реализации на низком уровне.

Например, мы имеем интерфейс 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 Эти методы представляют собой реализацию низкого уровня внутри определенного класса, поэтому мы не можем описывать такие методы внутри интерфейса.

+0

+1 Итак, вы используете 'share' как get-method для вывода частного свойства/метода. Я всегда использовал интерфейсы по семантическим причинам. – Thielicious

2

- Доступный в любом месте (Другие классы, экземпляры объекта);

Защищено - Доступно только в классах, которые продлить текущий класс;

- Доступно только в категории класс;

Reference

Интерфейс должно означать «то, что вы можете видеть из вне класса». Не имеет смысла добавлять непубличные методы.

Смежные вопросы