「サブタイプは、基本タイプの代わりに使用できる必要があります」
私がすでにBirdクラスを持っているとしましょう、そして:
class Parrot extends Bird {
public function Talk() {
echo 'Talk';
}
}
鳥は話すことができないので、オウムを鳥に置き換えることはできません。
これは単なる基本的な例ですが、通常、拡張クラスは基本クラスよりもはるかに多くのことを実行できます。私は何が欠けていますか?
「サブタイプは、基本タイプの代わりに使用できる必要があります」
私がすでにBirdクラスを持っているとしましょう、そして:
class Parrot extends Bird {
public function Talk() {
echo 'Talk';
}
}
鳥は話すことができないので、オウムを鳥に置き換えることはできません。
これは単なる基本的な例ですが、通常、拡張クラスは基本クラスよりもはるかに多くのことを実行できます。私は何が欠けていますか?
重要なのは、オウムはあらゆる点で鳥のように振る舞うべきであるということです。そうすれば、一般的に鳥を扱う計画を持っている人は、遭遇したオウムに驚かないでしょう。オウムがたまたま話すことができたとしても、彼らの計画は鳥に話すように頼むことを含まないので、それは問題ではありません。
たとえば、おそらく彼らは$bird->fly()
彼らが得るすべての鳥を呼び出すだけです-オウムが話す能力はその活動を混乱させないので、彼らのアルゴリズムはまだ機能します。しかし、飛べない種類の鳥(たとえばダチョウ)を発明した場合は、原則に違反しているため、一般的な鳥の処理アルゴリズムはすべての種類の鳥で機能しなくなります。