我读了很多文章,“界面是班级的合同”。具有私有,受保护和公共可见性的类,那么接口为什么只声明公共方法。
答案 0 :(得分:2)
公开 - 可用任何地方(其他类,对象实例);
受保护 - 仅在扩展当前类的类中可用;
隐私 - 仅在当前班级中可用;
界面应该是指"您可以从课外看到的内容"。添加非公开方法是没有意义的。
答案 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
类我们也有私有方法Twitter
,post
有Facebook
这个方法是特定类中的低层实现,所以我们不能描述这样的方法内部界面。