بررسی مفهوم وراثت در زبان برنامه نویسی جاوا


در آموزش قبل، توانستیم با موفقیت اولین شیء خود را در زبان برنامه نویسی شیء گرای جاوا ایجاد کنیم. حال در این قسمت قصد داریم تا Inheritance در زبان برنامه نویسی جاوا را مورد بررسی قرار دهیم.

در حقیقت در برنامه نویسی گاهی برنامه نویسان مجبور هستند Object هایی از روی کلاس های متفاوتی ایجاد کنند. در همین حین، ممکن است برخی از کلاس ها خصوصیات شان مشابه برخی دیگر کلاس ها باشد. در چنین شرایطی، اگر برنامه نویس بخواهد تک تک این کلاس ها را ایجاد کند و خصوصیات یکسان شان را نیز برای هر کدام تعریف کند، اگر در حین نوشتن پروژه بخواهد تا تغییری در برخی خصوصیات آن ها اعمال کند، مجبور است تا کلیه کلاس ها را بازنویسی کند و در همین جا است که یکی از بهترین ویژگی های زبان برنامه نویسی جاوا که یک زبان برنامه نویسی شئ گرا است را می تواند مورد استفاده قرار داده تا دیگر مجبور نباشد در صورت بروز یک تغییر، کلیه ی خصوصیات کلاس های ایجاد شده را بازنویسی کند. در حقیقت این ویژگی Inheritance یا "ارث بری" نام دارد.

به طور خلاصه، اگر برنامه نویس بخواهد یک شیء ایجاد کند که تمامی و یا برخی از ویژگی های یک شیء دیگر را داشته باشد می تواند از قابلیت ارث بری در زبان برنامه نویسی جاوا استفاده کند. در ضمن اگر برنامه نویس بخواهد تا یک شیء کلیه ی ویژگی های شیء دیگری را به ارث برد به جز یک ویژگی که می بایست تغییر کند، این کار باز هم از طریق وراثت امکان پذیر است که در ادامه ی آموزش ها با نحوه ی انجام این کار نیز آشنا خواهیم شد.

از سوی دیگر وراثت سلسله مراتبی نیز امکان پذیر است. فرض کنیم که ما سه شیء داریم به طوری که شیء شماره دو از شیء شماره یک ارث بری می کند و شیء شماره سه از شیء شماره دو. در واقع شیء شماره سه نه تنها از ویژگی های شیء شماره دو برخوردار خواهد بود، بلکه از آنجا که شیء شماره دو از شیء شماره یک ارث بری می کند، شیء شماره سه ویژگی های شیء شماره یک را نیز در بر خواهد داشت. در این مثال شیء شماره یک به عنوان Superclass یا "کلاس اصلی" تلقی می شود و اشیاء شماره دو و سه به عنوان Subclass یا "کلاس زیرشاخه" تلقی خواهند شد. جالب است بدانیم که در مثال فوق اگر چه که شیء شماره دو برای شیء شماره یک به عنوان یک Subclass تلقی می شود اما این در حالی است که برای شیء شماره سه به عنوان یک Superclass مد نظر قرار داده می شود. این رابطه به خوبی در تصویر زیر قابل مشاهده است:

حال برای آن که درک بهتری از وارثت در زبان برنامه نویسی جاوا داشته باشیم مثالی از دنیای واقعی زده و سپس آن را به یک پروژه ی شیء گرایی تبدیل می کنیم. پدر بزرگ خود را در نظر بگیریم که مثلاً دارای یکسری خصوصیات از این قرار است:

در واقع برخی از این خصوصیات در ژن ایشان غالب بوده و به فرزندشان که پدرمان باشد انتقال پیدا کرده است. در حقیقت، از موارد فوق خصوصیاتی که پدرمان از پدر بزرگمان به ارث برده عبارتند از:

همان طور که در جدول فوق مشاهده می شود پدرمان مورد 4 را از پدر بزرگ به ارث نبرده است. به عبارت دیگر، ایشان به جای این که عصبانیت را از پدر خود به ارث برده باشد، در عوض فرد خوش اخلاقی است! از سوی دیگر در مورد 5 هم پدر خلاقیت شان به اندازه پدر بزرگ نیست. به عبارت دیگر ایشان بسیار خلاق نیستند بلکه خلاق هستند. به این اتفاق در برنامه نویسی Override یا "رونویسی" می گویند.

به عبارت ساده تر، زمانی که ما بخواهیم که یک کلاس Subclass تعدادی از ویژگی های کلاس Superclass را به ارث نبرد، می بایست آن ویژگی مد نظر را Override کرد. علاوه بر این، به خاطر داشته باشیم که هر موقع یک ویژگی هم در کلاس Superclass موجود باشد و هم در کلاس Subclass، در این مواقع کامپایلر ویژگی موجود در Subclass را مد نظر قرار خواهد داد.

به خاطر داشته باشید
به خاطر داشته باشیم که برای Override کردن اجازه نداریم تا Modifier متد -منظور public, protected, private است- و یا تعداد و یا نوع پارامترهای آن را تغییر دهیم.

علاوه بر مواردی که پدرمان از پدرش به ارث برده، ایشان دارای دو خصیصه دیگر نیز می باشند که مخصوص به خودشان است که این دو خصیصه در موارد 8 و 9 گنجانده شده اند. در واقع میزان سواد ایشان در سطح لیسانس بوده و سطح مطالعه ایشان زیاد می باشد. اکنون ببینیم که پسر چه ویژگی هایی را از پدر به ارث برده است:

همان طور که در جدول فوق مشاهده می شود، پسر در مورد 1 برخلاف پدرش و پدر بزرگش قد بلند است، پسر در مورد 3 برخلاف پدرش و پدر بزرگش طاس نیست، پسر در مورد 4 برخلاف پدرش که فرد خوش اخلاقی بود، عصبانیت را مجددا از پدر بزرگ خود به ارث برده است. در مورد 8 پسر بر خلاف پدرش، تحصیلاتش را ادامه داده و فوق لیسانس دارد. در مورد 9 برخلاف پدر که زیاد مطالعه می کند، پسر خیلی زیاد مطالعه می کند. به منظور درک بهتر این روابط، تصویر زیر را می توانیم مد نظر قرار دهیم:

همان طور که در تصویر فوق نشان داده شده است، پدر بزرگ با رنگ قرمز، پدر با رنگ سبز و پسر با رنگ آبی مشخص شده اند. در مستطیل مشکی رنگ، خصوصیاتی نشان داده شده اند که بین هر سه نسل مشترک می باشند. سپس خصوصیاتی که خاص هر فرد است در بالای سرش مشخص شده است. در آموزش بعد، از خصوصیات مابین پدر بزرگ، پدر و پسر استفاده کرده و پروژه ای جدید می نویسیم تا از آن طریق درک بهتری از وراثت در زبان برنامه نویسی جاوا پیدا کنیم.

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
mahdjalili2121
mahdjalili2121
ممنون عالیه
کاربر میهمان
کاربر میهمان
عالیه
کاربر میهمان
کاربر میهمان
سلام دوستان لطفا راهنمایی میکنید مشکل این برنامه چی هست که اجرا نمیشه باید وزن توپ را چاپ کنه
public class Main
{
public static void main(String[] args)
{
static football b=new football();
System.out.println(b.getweight());
}


class ball
{
private double weight;
protected double getweight()
{
return weight;
}

protected void setweight(double weight)
{
this.weight=weight;
}
}

class football extends ball
{
public football()
{
setweight(5.5);
}
}



}

yazdang33
yazdang33
سلام. اونجا که یک شی ساختید static چه کارست؟؟؟!!!?

در پاسخ به

کاربر میهمان
کاربر میهمان
سلام ممکنه فایل PDF همه ی فصل های این دوره رو برام ایمیل کنید؟
ccc ccc
ccc ccc
سلام
متاسفانه نمیشه. شما باید همینجا مطالعه کنید. اگر PDF و می خواین، از مرورگر کروم استفاده کنید و صفحه رو به صورت پی دی اف save کنید.

در پاسخ به

حسین
حسین
بسیار متشکر از زحمتی که بابت این دوره ها کشیدید...
کاربر میهمان
کاربر میهمان
دنبال shadowing میگشتم میشه لطفا راهنمایی کنید؟ ممنونم
کاربر میهمان
کاربر میهمان
بسیار عالی توضیح دادین واقعا ممنونم