接口不能声明私有/受保护的函数


Interface cannot declare private / protected functions

我读了很多文章,《接口是类的契约》。一个拥有私有、受保护和公共可见性的类,为什么接口只声明公共方法呢?

接口描述如何与对象(公共方法)交互。
接口必须不知道内部对象结构(私有或受保护的方法)
和interface并不关心object的底层发生了什么。

私有和受保护的方法也可能因底层实现而异。

例如我们有接口SocialMedia

interface SocialMedia
{
    public function share();
}

在这个接口中,我们不关心(也不需要关心)对象将如何准确地共享信息,我们只知道信息将被共享。

我们还有两个类

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,我们知道如何与它们交互——这正是接口的意图。
对于Twitter类我们有私有方法tweet,对于Facebook类我们有私有方法post,这些方法是在特定的类内部低层实现的,所以我们不能在接口内部描述这些方法。

Public - Available anywhere(其他类,object的实例);

Protected -仅在扩展当前类的类中可用;

私有 -仅在当前类中可用;

参考

Interface应该表示"从类外部可以看到的东西"。添加非公共方法没有意义。