我想知道我該如何組織我的兩堂課。在我的例子中違反了Liskov替換原則嗎?
- 其中之一代表
Knife
:只是一個簡單,堅實,基本的,就像一把菜刀。 - 另一個是
PocketKnife
,其狀態爲已打開或已關閉。
class Knife{
public function cut() {/* do the cutting */}
}
class PocketKnife extends Knife{
private $opened = 0; // 0/1
// ...
public function cut() {
if ($this->opened) {
parent::cut();
}
}
}
都不是抽象的。
這個例子是否違反LSP?
在我看來確實如此,因爲對於cut()
操作後置條件應該是:
- 刀越來越切割
- 一些對象後,有點「老」的刀片必須有一定的損傷它(如果它是一些遊戲爲例)
但隨着其關閉狀態,我們不會有這些後置條件的PocketKnife
。或者我錯了?
這並沒有回答他的問題,它只是重申LSP背後的想法/原理。他的代碼是否違反了它?爲什麼? –