doure5236
doure5236
采纳率0%
2016-09-28 15:44 阅读 60
已采纳

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

I read many articles, "Interface is a contract of the class". A class having private,protected and public visibility then why interface declare only public methods.

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • 已采纳
    duanfu3390 duanfu3390 2016-09-28 18:06

    Interface describes how to interact with object (public methods).
    Interface must know nothing about internal object structure (private or protected methods)
    and interface don't care what going on under the hood of object.

    Also private and protected methods may be vary depending on low layer implementation.

    For example we have interface SocialMedia

    interface SocialMedia
    {
        public function share();
    }
    

    And inside this interface we don't care (and don't have to care) about how exactly object will share information, we only know that information will be shared.

    And also we have 2 classes:

    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();
        }
    }
    

    As you can see this classes implements SocialMedia and we know how to interact with them - exactly this is intention of interface.
    Also we have private methods tweet for class Twitter and post for Facebook this methods are low layer implementation inside particular class, so we can not describe such methods inside interface.

    点赞 评论 复制链接分享
  • donglu2523 donglu2523 2016-09-28 15:54

    Public - Available anywhere (Other classes, Instances of object);

    Protected - Available only in classes that extend the current class;

    Private - Available only in the current class;

    Reference

    Interface is supposed to mean "what you can see from outside the class". It would not make sense to add non-public methods.

    点赞 评论 复制链接分享

相关推荐