34

クラスのセットにインターフェイスを使用しています。ただし、インターフェイスで許可されるようにしたいため、問題がvisibilityあります(つまりpublic、 、protectedおよびprivate)。

親メソッドのみを保護する必要があり、子メソッドを非公開にする必要がありますが、次のエラーが表示されます

致命的なエラー: インターフェイス メソッド Baz::qux() のアクセス タイプは、<Baz/Bar を含むファイル> で省略しなければなりません。"

インターフェイスで他の表示方法を指定してBaz削除しようとしましpublicたが、すべて失敗しました。

インターフェイスを介してそれを行う方法はありますか?そうでない場合、それを宣言できる方法はありますか、それabstractも試しましたが失敗しました。

interface Baz
{
    public function qux();
}

class Bar implements Baz
{
    protected function qux()
    {
        //do foo
    }
}

class Foo extends Bar implements Baz
{
    private function qux()
    {
        parent::qux();
    }
}
4

3 に答える 3

58

インターフェイスで宣言するメソッドはパブリックである必要があります。インターフェイスを使用して契約を定義します。非公開メソッドは実装の詳細であり、それらはインターフェイスに属していません。名前が示すように、実装の詳細は、インターフェースを実装する具体的なクラスに入れる必要があります。

ウィキペディアから:

インターフェイスへのプログラミング

インターフェイスを使用すると、インターフェイスへのプログラミングと呼ばれるプログラミングスタイルが可能になります。この背後にある考え方は、内部実装の詳細ではなく、使用されるオブジェクトのインターフェイスに基づいてプログラミングロジックを作成することです。インターフェイスへのプログラミングは、実装の詳細への依存を減らし、コードをより再利用可能にします。[7] これにより、プログラマーは、使用されているオブジェクトを同じインターフェースを実装している別のオブジェクトと交換するだけで、後でシステムの動作を変更することができます。

于 2012-10-15T15:05:54.943 に答える
18

インターフェースは、2つの当事者間の契約であり、両者がどのように通信するかについての合意です。

メソッドを保護またはプライベートにすることは意味がありません。相手がそれらを見ることができないからです。

于 2012-10-15T15:06:23.430 に答える