اصل جایگزینی Liskov

Liskov Substitution Principle (LSP)

کلاس والد باید مناسب تمامی کلاس های فرزند باشد و اگر کلاسی از کلاسی ارث بری میکند نباید رفتار کلاس والد خود را تغییر دهد.

دو چیز متفاوت را بخاطر شباهت ظاهریشان نباید یکسان و مثل هم دانست!

درسته تو عالم واقعیت شتر مرغ پرنده هست ولی تو کدنویسی فرق می کنه!
درسته تو عالم واقعیت شتر مرغ پرنده هست ولی تو کدنویسی فرق می کنه!


فرض کنید در بازی دو نوع کاراکتر مختلف Warrior و Mage داریم و کاراکتر Mage تمام قابلیت های Warrior را دارد اگر به شیوه زیر ارث بری کنیم اشتباه است!

https://gist.github.com/smkplus/1abf4e67148879f00fb10e2d8e18b7a9

به جای روش بالا می توانیم یک واسط تعریف کنیم:

https://gist.github.com/smkplus/38cb37f4d30608bf77a9f7d8543759a0