1

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.

Anish Chandran
  • 427
  • 1
  • 5
  • 19
  • 2
    It's defining an interface which is always just public. How things work on the inside is irrelevant. – John Conde Sep 28 '16 at 15:45
  • Possible duplicate of [Is it possible to have an interface that has private / protected methods?](https://stackoverflow.com/questions/1876516/is-it-possible-to-have-an-interface-that-has-private-protected-methods) – Duncanmoo Jan 24 '18 at 06:59

2 Answers2

3

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.

cn007b
  • 16,596
  • 7
  • 59
  • 74
  • +1 So basically you use `share` like a get-method to output a private property/method. I've always been using interfaces for semantic reasons. – Thielicious Sep 29 '16 at 18:03
2

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.

Community
  • 1
  • 1
Mihailo
  • 4,736
  • 4
  • 22
  • 30