menusearch
javapro.ir
جستجو
۱۳۹۵/۱۰/۳۰ پنج شنبه
(6)
(0)
♨️ جلسه بیستم - ارث بری در جاوا
♨️ جلسه بیستم - ارث بری در جاوا

در این جلسه ارث بریرا بررسی میکنیم:
ما از جلسه 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 {

}
 
✔ کلاس Sub کلاس Super را به ارث برده است.یعنی کلاس Sub زیر کلاس یا فرزند کلاس Super هستش و Super پدر کلاس Sub می باشد.
 

✔  قبل از کلمه کلیدی 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.println("The sum of the given numbers:"+z);
   }
    
   public  void  Subtraction(int x, int y) {
      z = x - y;
      System.out.println("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.println("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 استفاده می شود آمده است:

  • این کلمه کلیدی برای فرق گذاشتن بین اعضای هم نام (متغیرها و متدها) کلاس پدر و فرزند می باشد.اگه یادتون باشه کلمه کلیدی this نیز برای فرق گذاشتن بین متغیر محلی و نمونه کلاس بود،کلمه کلیدی super نیز درجاهایی که متغیرها یا متدهای کلاس فرزند و پدر همنام باشند برای صدا زدن متغیرها یا متدهای پدر از کلمه کلیدی super استفاده میکنیم.
  • کاربرد دیگر این کلمه کلیدی برای صدا زدن سازنده (constructor) کلاس پدر در کلاس فرزند می باشد.

یادآوری :
اعضای کلاس یعنی چه؟ به متغیرها و متدهای درون بدنه یک کلاس اعضای کلاس گفته می شود.

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

 

super.variable;
super.method();

 

✔ با کلمه کلیدی super می توان متغیرها و متد های کلاس پدر را صدا زد و با این کار بین متغیرها و متدهای همنام کلاس پدر و فرزند فرق میگذاریم که از یکدیگر قابل تشخیص شوند.

 

در مثال زیر کاربرد کلمه کلیدی super را بررسی میکنیم:

 

package javalike;
class Super_class {
   int num = 20;
 
   // display method of superclass
   public void display() {
      System.out.println("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.println("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();
 
      // printing the value of variable num of subclass
      System.out.println("value of the variable named num in sub class:"+ sub.num);
 
      // printing the value of variable num of superclass
      System.out.println("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.println("value of the variable named num in sub class:"+ sub.num);

       System.out.println("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 را صدا زده ایم با این کار تمام دستورات درون بدنه این متد اجرا می شود.

 

.....ادامه این جلسه آموزشی را می توانید بصورت کتاب الکترونیکی (PDF شده) در لینک زیر دریافت کنید.


این جلسه آموزشی را بصورت کامل و مرتب شده در لینک زیر دانلود کنید:(در صورت خرابی لینک گزارش دهید)

آموزش آسان و ساده زبان برنامه نویسی جاوا

لینک دانلود

 

 


نشر این مطلب با ذکر منبع (لینک سایت) بلامانع است.
برای با خبر شدن از جدیدترین مطالب آموزشی جاوا عضو کانال تلگرام ما شوید.
 
instagram
نظرات کاربران
*نام و نام خانوادگی
* پست الکترونیک
* متن پیام

بستن
*نام و نام خانوادگی
* پست الکترونیک
* متن پیام

2 نظر
مجتبی قنبری
جمعه چهاردهم دی ۹۷
پاسخ
()
()
مجتبی قنبری
مهندس جان درس دادنت عاليه ...انقدر به جعفر گير نده
شرکت سازنده