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

时间:2016-09-28 15:44:56

标签: php oop

我读了很多文章,“界面是班级的合同”。具有私有,受保护和公共可见性的类,那么接口为什么只声明公共方法。

2 个答案:

答案 0 :(得分:2)

公开 - 可用任何地方(其他类,对象实例);

受保护 - 仅在扩展当前类的类中可用;

隐私 - 仅在当前班级中可用;

Reference

界面应该是指"您可以从课外看到的内容"。添加非公开方法是没有意义的。

答案 1 :(得分:2)

接口描述了如何与对象进行交互(公共方法)。
接口必须对内部对象结构一无所知(私有或受保护的方法)
界面并不关心对象引擎盖下发生了什么。

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

例如,我们有界面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,我们知道如何与它们进行交互 - 这正是接口的意图。
对于tweet类我们也有私有方法TwitterpostFacebook这个方法是特定类中的低层实现,所以我们不能描述这样的方法内部界面。