در جلسه قبل به نحوه ایجاد کلاس تعریف اجزای کلاس و همچنین نحوه ارث بردن یه کلاس از کلاس والد خود را هم آموزش دادیم و به نحوه اجرایی گرفتن از کلاس ها هم پرداختیم در این جلسه نیز بقیه مباحث مربوط به شی گرایی رو دنبال خواهیم کرد
خوب فرض کنید ما در کلاس والد car که داشتیم یک متد ایجاد کنیم با بدنه مخصوص خود اگر یه متد با همان نام و مشخصات در کلاس فرزند bmw که داشتیم ایجاد کنیم ولی با این تفاوت که بیاییم دستورات بدنه متد رو به خاطر نیازمون تغییر بدیم به این فرآیند ovrride کردن می گویند به تصاویر زیر دقت کنید
و در حقیقت عمل ovrriding رو انجام دادیم به همین صورت می تونیم متدهای کلاس والد رو اوراید کنیم و بنابه نیازی که داریم در کلاس فرزند دستورات داخل مند رو تغییر بدیم و پیاده کنیم خوب حالا بیایید از این متد ها خروجی بگیریم 👇👇👇👇
و اگر توجه کنید در تصویر توسط کامنت نیز مشخص کردم به هر دو متد motor توسط شی ای که از کلاس تعریف کردیم دسترسی پیدا کردیم که در کلاس فرزند تو نستیم متد اوراید شده رو اجرا کنیم که اگر در خروجی گرفته شده از برنامه دقت کنید خروجی ها با هم تفاوت دارن ینی کلاس فرزند متد اوراید شده رو فراخوانی می کند برای اجرا
فرض کنید ما داخل یک کلاس بیاییم و چند متد هم نام و دقیقا شبیه هم تعریف کنیم موقع اجرای این متدها صد درصد کامپایلر به مشکل خواهد خورد به این دلیل که نمی تواند تشخیص بدهد که کدا متد باید اجرا شود و یا اینکه متدها تکراری هست خطا حواهد داد ولی اگر این متدهایی رو که تعریف کرده ایم پارامترهای ورودی متفاوتی داشته باشند کامپایلر می تواند از نوع پارامتر های ورودی هر تابع تضخیص بدهد که کدا متد باید اجرا شود با اینکه متدها ها هم نام باشند به این تعریف متد ها چندریختی ایستاتیک گفته می شود.
این نوع چند ریختی به این صورت هست که یه متد هم نام در هر دو کلاس والد و فرزند داشته باشیم و موقع اجرایی گرفتن اگر یک شی از کلاس والد با ارجا از کلاس فرزند ایجاد کنیم متدی که در کلاس فرزند داریم اجرا خواهد شد 👇👇👇👇