2016-09-28 38 views
1

我讀過很多文章,「接口是類的合同」。一個具有私有,受保護和公共可見性的類,那麼爲什麼接口只聲明公共方法。接口不能聲明私有/受保護的函數

+2

它定義了一個始終公開的接口。如何在內部工作是無關緊要的。 –

+0

可能重複的[是否有可能具有私有/受保護方法的接口?](https://stackoverflow.com/questions/1876516/is-it-possible-to-have-an-interface-that-has -private-protected-methods) – Duncanmoo

回答

2

接口描述如何與對象(公共方法)進行交互。
接口必須對內部對象結構(私有或受保護的方法)一無所知
和接口不關心對象背後發生了什麼。

私有和受保護的方法可能因低層實現而異。

例如,我們有接口SocialMedia

interface SocialMedia 
{ 
    public function share(); 
} 

而這個接口,我們不關心(而不必關心)有關對象將如何準確地共享信息裏面,我們只知道信息會共享。

而且我們有2類:

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此方法是特定類內的低層實現,所以我們不能在接口內部描述這樣的方法。

+0

+1所以基本上你使用'share'就像get-method一樣輸出私有屬性/方法。我一直在使用接口來實現語義。 – Thielicious

2

公共 - 可隨時隨地(其他類對象的實例);

受保護 - 僅適用於擴展當前類別;

Private - 僅當前類;

Reference

接口的解釋是:「你可以從類外看」。加入非公開方法是沒有意義的。