override کردن
سلام بچه ها. چه جاهایی ما می تونیم یک کلاس رو override کنیم?. چرا به جای ارث بری از یک کلاس دیگر(extent) آن کلاس پدر را ovrride نمی کنیم؟. خواهشا ساده، روان و با مثال توضیح بدید.
صمیمانه متشکرم.
همه چیز به وراثت در مبحث شی گرایی مربوط میشه .
فرض کنید شما یک کلاس دارید به اسم animal ، کلاس animal یک موجودیت کلی هست و هرچیزی رو مثلا پرنده و خزنده و ... رو میتونه شامل بشه به عبارت دیگر یعنی پرنده یک فرزند از کلاس animal هست:
خب animal یک رفتار داره مثل "حرکت کردن (move) " اما هر حیوان به شیوه خودش راه میره ، ماهی شنا میکنه ، مار میخزه ، پرنده پرواز میکنه پس ما اطلاعی از نحوه حرکتشون نداریم بنابراین اون متد رو abstract میکنیم یعنی متد فاقد بدنه هست و پیاده سازی اون رو به فرزندانش موکول میکنیم:
این کلاس animal
public abstract class Animal{
public abstract void move();
}
حالا کلاس bird رو میخوایم پیاده سازی کنیم ، ما چون میدونیم پرنده چطور حرکت میکنه نحوه حرکتش رو اینجا تعریف میکنیم:
public class Bird extends Animal{
@Override
public void move(){
//flying
}
}
کلاس fish
public class Fish extends Animal{
@Override
public void move(){
//swinming
}
}
خب درمورد سوالتون که چرا پدر رو override نمی کنیم!!؟ طبق مثال بالا بازنویسی رفتار یک کلاس در فرزندان باید انجام بشه مثلا حرکت کردن بین همه مشترک هست اما چون رفتار ها متفاوت هست ما رفتار هر موجود رو متناسب با خودش اصلاح کنیم.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .