میخوام بگم در کد نویسی به شدت صرفه جویی میشه. در خیلی از متدها (توابع) شما لازم نیست برای انواع کلاس های شبیه به هم (یعنی دارای یک والد parent) چندین متد بنویسید. کافیه یکی برای اون والد بنویسید و بقیه فرزند ها میتونن به جای اون والد در اون متد قرار بگیرن.
از همون مثالهایی که در شی گرایی زیاد میزنن، بگم شاید بهتر باشه: فرض کنید ما یک تابع داریم که یک خودرو رو به عنوان ورودی میگیره و تعداد چرخ هاش رو مشخص میکنه.
خب حالا اگر رابطه والد/فرزندی در شی گرایی استفاده نکنیم، ما باید یک تابع برای پراید بنویسیم، یک تابع برای پژو یک تابع برای X.
برای همین ما میاییم یک سری خصیصه های مشترک رو به عنوان کلاس خودرو تعریف میکنیم. حالا فرزندهای این کلاس میتونن خصیصه های بیشتری رو داشته باشند یا خصیصه های والد رو تغییر بدن. اما در هر حال اگر خصیصه تعداد چرخ در والد وجود داشته باشه، پس تمام فرزندهاش هم این خصیصه رو دارن.
پس اگر تابعمون بگیم مقدار خصیصه تعداد چرخ رو چاپ کن، الان هر آبجکتی از پژو یا پراید میتونه اینجا قرار بگیره در صورتی که ما خودرو رو به عنوان ورودی تابع تعریف کردیم ولی چون پژو و پراید فرزند کلاس خودرو هستند، خصیصه های اون رو به ارث بردن و در نتیجه حتما این خصیصه رو دارن پس مشکلی پیش نمیاد. در غیر این صورت تضمینی در داشتن اون خصیصه ها نیست.