0

私の本では十分な説明がありません。スーパークラスに同じメソッド シグネチャがあるのに、なぜサブクラスにプライベート メソッドを持てないのかを理解したいのです。ただし、スーパークラスのメソッドは public になります。

この回答をグーグルで検索してみましたが、プライベートメソッドのオーバーライドに関するものしか見つかりませんでした。ただし、パブリック メソッドをプライベート メソッドでオーバーライドしようとしています。

4

3 に答える 3

2

派生メソッドを作成することprivateで、スーパー クラスによって作成されたコントラクトが変更され、それ以降のサブクラスが元のpublicメソッドにアクセスできなくなります。

スーパークラスに型指定されたパラメーターを渡された関数は、メソッドの呼び出しが許可されているかどうかを事前に知りません。これはまずいでしょう。

于 2013-04-24T18:00:01.500 に答える
1

もしできるなら、何?パブリック メソッドをプライベート メソッドでオーバーライドすると、スーパー クラス メソッドが見えなくなります。そのメソッドが利用可能であることを期待するコードは壊れます。OO の考え方の 1 つ ( Liskov Substitution Principleと呼ばれる) は、プログラムが、使用されている正確な実装クラスを知らなくても、高レベルでオブジェクトを操作できなければならないというものです。サブクラスのオブジェクトは、そのスーパークラスのオブジェクトに置き換え可能でなければなりません。スーパークラスのメソッドを無効にできると、これが弱体化します。

于 2013-04-24T17:59:55.180 に答える