「インターフェイスはクラスのコントラクトです」という記事を読んでいます。 private、protected、publicの可視性を持つクラスの場合、なぜインタフェースはpublicメソッドのみを宣言しますか?インターフェイスでプライベート/プロテクトされた関数を宣言できません
答えて
インターフェイスはオブジェクトとのやりとり方法(パブリックメソッド)を記述します。
インターフェイスは内部オブジェクト構造(プライベートまたは保護されたメソッド)について何も知らなくてはなりません
およびインターフェイスはオブジェクトのフードの下で何が起こっているか気にしません。
プライベートおよび保護された方法は、低レイヤーの実装によって異なります。
例えば、我々は、オブジェクトが情報を共有する方法を正確におよそインタフェース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
を実装し、我々は彼らと対話する方法を知っている - まさにこれはインターフェースの意図です。
また、Twitter
のプライベートメソッドtweet
とFacebook
のpost
があります。このメソッドは、特定のクラス内でのロー層実装なので、このメソッドをインターフェイス内に記述することはできません。
+1基本的には、プライベートプロパティ/メソッドを出力するgetメソッドのように 'share'を使います。私は意味論的な理由から常にインターフェイスを使用してきました。 – Thielicious
公開 - 利用可能どこでも(他のクラス、オブジェクトのインスタンス);
保護 - 現在のクラスを拡張するクラスでのみ利用可能です。;
プライベート - 現在のクラスのでのみ利用可能です。
インタフェースは、「あなたはクラスの外から見ることができるもの」を意味するようになっています。 非公開メソッドを追加するのは意味がありません。
- 1. postgresqlで宣言されたテーブルをSELECT FROMできませんか?私の関数宣言で
- 2. PostgreSQLで関数内に変数を宣言できません
- 3. 別の関数内の関数で宣言された変数を使用できません。
- 4. 宣言された関数が見つかりません
- 5. 空の関数内の変数を宣言できません。
- 6. インターフェイスは型を宣言できません
- 7. Typescriptは、関数の外で宣言された配列をロードしません。
- 8. 宣言されたJListを使用できません - eclipse
- 9. PHP:関数エラーを再宣言できませんか?
- 10. 関数 'yylex': '変数'は宣言されていません
- 11. Ruta DECLAREで宣言された変数を使用できません
- 12. ノックアウトJSで宣言された変数はHTMLで利用できません
- 13. API宣言はインターフェイスでなければなりません - Retrofit
- 14. クラス 'MainWindow'で宣言されたメンバー関数がありません
- 15. C++関数が宣言されていませんか?
- 16. 関数の先頭で宣言された変数と後で宣言された変数の差
- 17. 関数内で宣言された関数のスコープ
- 18. 匿名関数内で宣言された関数へのアクセス?
- 19. 関数の宣言でテンプレート引数を使用できません
- 20. パペット重複宣言:クラス[Mongodb]は既に宣言されています。再宣言できません
- 21. 関数宣言と変数宣言が呼び出されました。
- 22. グローバルに宣言された変数は、javascript関数にはアクセスできません。
- 23. * .hbm.xmlファイルで宣言されたnamedQueryでSPを実行できません
- 24. ES6で定数として宣言された関数をエクスポート
- 25. libgit2 GIT_BUF_INITは宣言されていません。それはどこで宣言されるべきですか?
- 26. クラスエラー:クラスを宣言できません
- 27. DOMPDF_autoload()を再宣言できません
- 28. 関数がCヘッダファイルで2回宣言されました
- 29. Kotlinのインターフェイスで宣言されたプロパティを実装する
- 30. C++エラー:スコープ内で宣言されていません。メンバー関数
これは、常に公開されているインターフェイスを定義しています。内側のものがどのように機能するかは無関係です。 –
[プライベート/保護されたメソッドを持つインターフェイスを使用することはできますか?](https://stackoverflow.com/questions/1876516/is-it-possible-to-have-an-interface-that-has) -private-protected-methods) – Duncanmoo