java, آموزش قدم به قدم جاوا, جاوا, شی گرایی در جاوا

ارث بری در جاوا (inheritence in java)

ارث بری در جاوا

در این جلسه تیم کدگیت را با آموزش ارث بری در جاوا همراهی کنید. این آموزش ادامه شی گرایی در جاوا است. پیش نیاز این آموزش شامل موارد زیر است:

  1. آشنایی با کلمه کلیدی this
  2. آشنایی با constructor
  3. آشنایی با شی گرایی

پیش نیاز

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

  1. کلاس Animal
  2. کلاس Bird
  3. کلاس Fish
  4. کلاس Zoo (همان main برنامه)

در زیر کدها به ترتیب آورده شده است:

public class Bird  {

     public void fly(){
          System.out.println("flying......");
     }
}

public class Fish  {

     public void swim(){
          System.out.println("swiming......");
     }
}

public class Animal {

     int Age;
     String Gender;
     int WeightInKg;

     public Animal(int age, String gender, int weightInKg) {
          Age = age;
          Gender = gender;
          WeightInKg = weightInKg;
     }

     public void eat() {
          System.out.println("eating......");
     }

     public void sleep() {
          System.out.println("sleeping......");
     }

}

public class Zoo {

     public static void main(String[] args) {
          Animal animal1 = new Animal(3, "Male", 10);
          animal1.eat();

          Bird bird = new Bird();
          bird.fly();

     }

}

کلاس های Fish و Bird شامل یک متد هستند(یکی swim و دیگری fly). کلاس animal شامل فیلدهای سن و جنسیت و وزن است و یک Constructor هم برای فیلهای آن نوشتیم. دو متد Eat و sleep هم در این کلاس است. در کلاس Zoo از کلاسهای Animal و Bird یک شی ساختیم و متدهای آنها را صدا زدیم.

ارث بری در جاوا

در بالا ما سه کلاس Fish و Bird و Animal داریم. در کلاس Animal دو متد خوابیدن(Sleeping) و خوردن(Eating) قرار دادیم. مسئله اینجاست که دقیقا این ویژگیها در کلاس Bird و Fish هم وجود دارد. یک راه این است که تمام متدهای در کلاس Animal را درون این دو کلاس قرار دهیم ولی آیا این راه درست است؟ اگر بخواهیم یک حیوان دیگر بسازیم باز هم باید همین کار ها را بکنیم؟!!!

ره حل استفاده از ارث بری در جاوا است. ارث بری در جاوا همانطور که از نام آن معلوم است ارث بردن تمام ویژگیهای یک کلاس به کلاس دیگر است.

کلمات کلیدی ارث بری در جاوا

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

  1. Extends: این کلمه موقعی که میخواهیم یک کلاس از کلاس دیگر ارث بری کند استفاده میکنیم.
  2. کلاس پدر: اگر کلاس Bird از کلاس Animal ارث بری(Extends) کند کلاس Animal را کلاس پدر میگوییم.
  3. کلاس فرزند: اگر کلاس Bird از کلاس Animal ارث بری(Extends) کند کلاس Bird را کلاس فرزند میگوییم.
  4. Super: اشاره گر به شی پدر. با super ما به constructor و متدها و فیلدهای پدر دسترسی داریم (البته در صورت private نبودن).

 کد ارث بری در جاوا

در بالا گفتیم میخواهیم کدی بزنیم که هم Bird و هم Fish ویژگیهای Animal را داشته باشند. برای این کار ما باید این دو کلاس را extends کنیم به کلاس Animal . کد این دو کلاس به صورت زیر است:

public class Bird extends Animal {

     public Bird(int age, String gender, int weightInKg) {
          super(age, gender, weightInKg);
     }

     public void fly(){
          System.out.println("flying......");
     }
}
public class Fish extends Animal {

     public Fish(int age, String gender, int weightInKg) {
          super(age, gender, weightInKg);
     }

     public void swim(){
          System.out.println("swiming......");
     }
}

همانطور که میبینید ما این کلاس ها را Extend کردیم ولی یک Constructor هم اضافه شد به کد نسبت به قبل. دلیل نوشتن Constructor این است که وقتی ما شی از bird میسازیم به دلیل ارث بری در جاوا به طور غیر مستقیم یک شی Animal نیز ساختیم(چرا؟!!). به همین دلیل با کلیدواژه Super میتوانیم Constructor پدر را صدا بزنیم.

تست ارث بری در جاوا

برای تست کدهای بالا، کد main زیر را بزنید:

public class Zoo {

     /**
      * @param args
      */
     public static void main(String[] args) {
          Animal animal1 = new Animal(3, "Male", 10);
          animal1.eat();

          Bird bird = new Bird(1, "Male", 1);
          bird.eat();
          bird.fly();

     }

}

همانطور که میبینید bird متد eat را هم میتواند صدا بزند. توجه داشته باشید که کلاس Animal به متد fly و swim دسترسی ندارد.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *