آموزش تمامی مباحث پیشرفته و کاربردی زبان برنامه نویسی جاوا[اینجا کلیک کنید]
در این جلسه ارث بریرا بررسی میکنیم:
ما از جلسه 1 تا 19 ابتدا با ابزارها و برنامه های مورد نیاز برای نوشتن یک برنامه به زبان جاوا و مباحث پایه ای جاوا آشنا شدیم،می توان گفت این مباحث پایه ای نظیر تعریف متغیرها،حلقه ها،شرط ها،متدهاو... در بین همه زبان های برنامه نویسی مشترک هستند،مهم ترین بخش که جاوا را با سایر زبان های برنامه نویسی متمایز میکند همین مبحث شی گرایی جاوا است!!! که ارث بری یا وراثت جزیی از این بخش هستش. تمام سعی خودم رو میکنم این جلسه مهم را به زبان ساده بیان کنم!خب بریم سراغ اصل مطلب!
ارث بری یا وراثت!
ارث بری در برنامه نویسی جاوا یعنی چه؟!!! ارث بری یعنی یک کلاس از خصوصیات ( متدها و متغیرهای) کلاس دیگر استفاده کند!
ارث بری در جاوا مثل دنیای واقعی هست!!!! بزارید با مثالی از دنیای واقعی این مبحث را جا بندازم:
یک فرزند از پدر خود میتواند مال و منالی رو چه در زمان حیات و چه بعد از مرگ به ارث ببرد!!!:
مثلا در زمان حیات پدر جعفر یک خانه + یک پراید دارد،جعفر چون فرزند پدرش هست میتونه در خانه پدر زندگی کنه و از امکانات منزل پدر استفاده کند و گهگاهی هم دزدکی پدر پراید رو از خونه خارج کنه و جیم بشه تنها جعفر به دلیل این که فرزند پدرش هست حق داره در خانه زندگی کند و حالا بره با پراید ی دور دوری هم کنه 😊😊😊 مثلا گرگعلی پسر همسایه نمیتونه بیاد در خانه پدر جعفر زندگی کنه چون پدر جعفر بابای گرگعلی نیست!!! نتیجه میگیریم با یک رابطه پدر و فرزندی،فرزند میتونه از امکانات پدر استفاده ببرد در جاوا هم همین طور هست!!!! یعنی یک کلاس میتونه در صورتی از ویژگی ها و رفتار های کلاس دیگر استفاده کند که اون کلاس را به ارث ببرد ،کلاسی که ویژگی ها و رفتارهای کلاس دیگر را به ارث میبرد کلاس فرزند یا زیر کلاس و کلاسی که کلاس فرزند از خصوصیات و رفتارهای آن استفاده میکند کلاس پدر میگوییم.
مثال: فرض کنید دو کلاس به نام A و B داریم،در صورتی کلاس A پدر کلاس B و B فرزند کلاس A هستش که کلاس B کلاس A را به ارث ببرد!!!!خب چطور یک کلاس میتواند کلاس دیگر را به ارث ببرد؟!!! پاسخ در ادامه آموزش!
کلمه کلیدی extends :
با استفاده از کلمه کلیدی extends یک کلاس میتواند ویژگی ها و رفتار های کلاس دیگر را به ارث ببرد.یعنی یک کلاس با استفاده از این کلمه کلیدی میتواند خودش را فرزند کلاس دیگر جا بزند! و اون کلاس نقش پدرش را بازی کند.
نحوه به ارث بردن دو کلاس را در زیر مشاهده میکنیم:
package javalike ; public class Child extends parent { } class Parent { } |
✔ در این کد برنامه، کلاس Child با استفاده از کلمه کلیدی extends کلاس Parent را به ارث برده است که با این کار کلاس Child فرزند کلاس Parent و کلاس Parent پدر کلاس Child شده است،به گونه ای که تمامی خصویات،ویژگیها و رفتار های کلاس Parent برای کلاس Child قابل دستیابی هستش.چیزی شبیه رابطه جعفر با پدرش 😊
✔ در اصطلاحات ارث بری یا وراثت به کلاس پدر ،کلاس super،کلاس بزرگ،کلاس اصلی،کلاس پایه،پدربزرگ یا هر چیزی که نشان از بزرگی داره میگن 😊 و به کلاس فرزند،کلاس sub ،زیر کلاس میگن و هر چیزی که جزیی از کل را نشان دهد.
🔵 در زیر نمونه کد دیگر که تنها اسمشون فرق میکنه مشاهده میکنید:
class Super { } class Sub extends Super { } |
✔ قبل از کلمه کلیدی extends، نام کلاس فرزند (کلاسی که قصد داره از متغیرها و متدهای کلاس دیگر استفاده کند) و بعد از آن نام کلاس پدر (کلاسی که قراره یک کلاس از ویژگی ها و رفتارش استفاده ببرد) قرار میگیرد.یعنی این کلمه تنها در کلاس فرزند استفاده میشود برای به ارث بردن کلاس پدر.
class A { } class B extends A { } |
✔ کلاس B فرزند کلاس A و کلاس A پدر کلاس B هستش، زیرا کلاس B کلاس A را به ارث برده است.
🔵 در زیر یک مثال ساده کاربردی ارث بری یک کلاس از کلاس دیگر را بررسی میکنیم:
package javalike ; class Calculation { int z; public void addition(int x, int y) { z = x + y; System.out. print ln("The sum of the given numbers:"+z); } public void Subtraction(int x, int y) { z = x - y; System.out. print ln("The difference between the given numbers:"+z); } } public class My_Calculation extends Calculation { public void multiplication(int x, int y) { z = x * y; System.out. print ln("The product of the given numbers:"+z); } public static void main(String args[]) { int a = 20, b = 10; My_Calculation demo = new My_Calculation(); demo.addition(a, b); demo.Subtraction(a, b); demo.multiplication(a, b); } } |
خروجی:
The sum of the given numbers:30 The difference between the given numbers:10 The product of the given numbers:200 |
✔ در این مثال دو کلاس به نام های Calculation و My_Calculation داریم،که کلاس My_Calculation کلاس Calculation را به ارث برده است،و طبق قانون رسما کلاس My_Calculation فرزند کلاس Calculation میشود و تمامی متغیرها و متدهای کلاس پدر یعنی Calculation برای کلاس فرزند یعنی My_Calculation قابل دستیابی است.
✔ کلاس Calculation دارای یک متغیر از نوع عدد صحیح به نام z و دو متد addition و Subtraction هستند که هر دو متد دو پارامتر به عنوان ورودی میگیرن و اولی حاصل جمع و دومی حاصل تفریق دو عدد را در خروجی چاپ میکنند.
✔ کلاس My_Calculation دارای یک متد به نام multiplication است که دو عدد صحیح از پارامتر ورودی خود میگیرد و حاصلضرب دو عدد را در خروجی چاپ میکند، و همچنین دارای متد main برای اجرای برنامه هستش،در متد main این کلاس دو متغیر محلی از نوع عدد صحیح به نام های a,b تعریف و مستقیم مقداردهی کرده ایم.بعد یک شی از کلاس My_Calculation به نام demo ایجاد کرده ایم.حال با شی demo متدهای این کلاس یعنی addition, Subtraction, multiplication را صدا زده ایم!!! اما یک نکته مهم!!!در بدنه کلاس ما متدهای addition, Subtraction پیاده سازی که نشده؟!!!چرا برنامه خطا نمیده؟!! پاسخش اینه که چون کلاس My_Calculation کلاس Calculation را به ارث برده است یعنی کلاس My_Calculation فرزند کلاس Calculation است و طبق قانون ارث بری وقتی یک کلاس کلاس دیگر را به ارث میبرد میتواند از تمامی متدها و ویژگی های اون کلاس دسرسی داشته باشد بدون این که نیاز به پیاده سازی آنها در کلاس خود داشته باشد یعنی این متدها از پدر و استفاده از فرزند!مانند این است که پراید مال پدر جعفر بود اما جعفر هم ازش استفاده میکرد!!
✔ در این برنامه وقتی ما یک شی از کلاس My_Calculation میسازیم،علاوه بر این که این شی حاوی ویژگی ها و رفتار های کلاس My_Calculation هستش،یک کپی از محتویات کلاس پدر خود Calculation را نیز در بر دارد،به همین خاطر از طریق شی ساخته شده از کلاس فرزند یعنی My_Calculation میتوان به ویژگی ها و رفتار های کلاس پدر یعنی Calculation دسرسی داشت.این مفهوم بصورت شکل در زیر آمده است:
کلمه کلیدی super :
کلمه کلیدی super شبیه کلمه کلیدی this هستش.در زیر جاهایی که کلمه کلیدی super استفاده میشود آمده است:
یادآوری :
اعضای کلاس یعنی چه؟ به متغیرها و متدهای درون بدنه یک کلاس اعضای کلاس گفته میشود.
فرق گذاشتن بین اعضای هم نام کلاس پدر و فرزند:
هنگامی که یک کلاس،خصوصیات (متغیرها و متدها) کلاس دیگری را به ارث میبرد، اگر اعضای کلاس پدر با اعضای کلاس فرزند همنام باشد،برای فرق گذاشتن بین ویژگی ها و رفتارهای کلاس پدر و فرزند از کلمه کلیدی super برای صدا زدن متغیرها و متدهای کلاس پدر استفاده میکنیم.
super.variable; super.method(); |
✔ با کلمه کلیدی super می توان متغیرها و متد های کلاس پدر را صدا زد و با این کار بین متغیرها و متدهای همنام کلاس پدر و فرزند فرق میگذاریم که از یکدیگر قابل تشخیص شوند.
در دوره پیشرفته برنامه نویسی جاوا به صورت ویدئویی به موضوع وراثت(Inheritance) در جاواپرداخته ایم. |
در مثال زیر کاربرد کلمه کلیدی super را بررسی میکنیم:
package javalike; class Super_class { int num = 20; // display method of superclass public void display() { System.out. print ln("This is the display method of superclass"); } } public class Sub_class extends Super_class { int num = 10; // display method of sub class public void display() { System.out. print ln("This is the display method of subclass"); } public void my_method() { // Instantiating subclass Sub_class sub = new Sub_class(); // Invoking the display() method of sub class sub.display(); // Invoking the display() method of superclass super.display(); // print ing the value of variable num of subclass System.out. print ln("value of the variable named num in sub class:"+ sub.num); // print ing the value of variable num of superclass System.out. print ln("value of the variable named num in super class:"+ super.num); } public static void main(String args[]) { Sub_class obj = new Sub_class(); obj.my_method(); } } |
خروجی:
This is the display method of subclass This is the display method of superclass value of the variable named num in sub class:10 value of the variable named num in super class:20 |
✔ در این برنامه دو کلاس به نام های Super_class و Sub_class داریم، کلاس Sub_class فرزند (زیر کلاس) کلاس Super_class است،زیرا کلاس Sub_class ،کلاس Super_class را به ارث برده است یعنی کلاس Super_class پدر کلاس Sub_class هستش و کلاس Sub_class به تمام ویژگی ها و رفتار های کلاس Super_class دسرسی دارد.
✔ کلاس Super_class دارای یک متغیر از نوع عدد صحیح به نام num ویک متد که پیامی را در خروجی چاپ میکند به نام display دارد.
✔ کلاس Sub_class نیز یک متغیر از نوع عدد صحیح و یک متد همنام با پدر خود و متد دیگری به نام my_method دارد!!!
Sub_class sub = new Sub_class(); sub.display(); super.display(); |
✔ در بدنه کلاس Sub_class، درون متد my_method ما یک شی از کلاس Sub_class به نام sub ایجاد کرده ایم.در بدنه این متد ،با استفاده از شی sub، متد display درون کلاس Sub_class را صدا زده ایم و با کلمه کلیدی super متد display درون کلاس پدر Sub_class یعنی Super_class را صدا کرده ایم.در اینجا با وجود همنام بودن متد کلاس فرزند و پدر با استفاده از کلمه کلیدی super بین متد فرزند و پدر فرق گذاشته ایم با این کار متدهای همنام بین پدر و فرزند قابل تشخیص میشوند.
System.out. print ln("value of the variable named num in sub class:"+ sub.num); System.out. print ln("value of the variable named num in super class:"+ super.num); |
✔ در اینجا نیز متغیر از نوع عدد صحیح در کلاس فرزند (Sub_class) و کلاس پدر (Super_class) همنام است پس برای تمایز قائل شدن و قابل تشخیص بودن این متغیر که آیا مربوط به پدر (Super_class) هست یا فرزند(Sub_class) از کلمه کلیدی super برای صدا زدن متغیر کلاس پدر (Super_class) استفاده کرده ایم.برای صدا زدن متغیر num مربوط به کلاس فرزند(Sub_class) از شی ایجاد شده از کلاس فرزندمون(Sub_class) یعنی sub استفاده کرده ایم.در خروجی مقدار این متغیر برای کلاس پدر (Super_class) و فرزند(Sub_class) متفاوت است یعنی برای کلاس فرزند(Sub_class) مقدار 10 و برای کلاس پدر (Super_class)این متغیر مقدارش 20 است.پی در اینجا با وجود همنام بودن متغیر کلاس پدر (Super_class) و فرزند(Sub_class) با کلمه کلیدی super بین ویژگی همنام پدر (Super_class) و فرزند(Sub_class) تمایز ایجاد کردیم.
public static void main(String args[]) { Sub_class obj = new Sub_class(); obj.my_method(); } |
✔ در پایان در متد main کلاس Sub_class یک شی از کلاس فرزند (Sub_class) ایجاد کرده و توسط شی متد my_method را صدا زده ایم با این کار تمام دستورات درون بدنه این متد اجرا میشود.
این جلسه آموزشی را بصورت کامل و مرتب شده در لینک زیر دانلود کنید:(در صورت خرابی لینک گزارش دهید)
لینک دانلود
بستن *نام و نام خانوادگی * پست الکترونیک * متن پیام |
دوره های آموزشی برنامه نویسی
انجام پروژه های برنامه نویسی
تدریس خصوصی برنامه نویسی
بیش از 7 سال از فعالیت جاواپرو میگذرد
جاواپرو دارای مجوز نشر دیجیتال از وزارت فرهنگ و ارشاد اسلامی است
جهت ارتباط مستقیم با جاواپرو در واتساپ و تلگرام :
09301904690
بستن دیگر باز نشو! |