چندریختی (Polymorphism)
چندریختی یعنی «چند شکل». یعنی یک کار، شکل های مختلف دارد. این تفاوت از ارث بری (Inheritance) می آید. متد مشترک داریم، اما هر فرزند رفتار خودش را اجرا می کند. مثل زنگ مدرسه که همه می شنوند، اما هر کلاس واکنش خودش را دارد.
تعریف ساده چندریختی در جاوا
با ارث بری، کلاس ها متد مشترک دارند. اما هرکدام پیاده سازی مخصوص خود را می نویسند. در نتیجه یک فراخوانی، نتیجه های متفاوت می دهد.
class Animal {
  public void animalSound() {
    System.out.println("The animal makes a sound");
  }
}
class Pig extends Animal {
  public void animalSound() {
    System.out.println("The pig says: wee wee");
  }
}
class Dog extends Animal {
  public void animalSound() {
    System.out.println("The dog says: bow wow");
  }
}
نکته: برای ارث بری از کلمه extends استفاده کن. سپس فرزند متد مشترک را بازنویسی می کند.
ایجاد آبجکت و دیدن رفتارهای مختلف
حالا چند شیء با نوع والد می سازیم. اما هرکدام صدای خودش را چاپ می کند. این همان چندریختی در عمل است.
class Animal {
  public void animalSound() {
    System.out.println("The animal makes a sound");
  }
}
class Pig extends Animal {
  public void animalSound() {
    System.out.println("The pig says: wee wee");
  }
}
class Dog extends Animal {
  public void animalSound() {
    System.out.println("The dog says: bow wow");
  }
}
class Main {
  public static void main(String[] args) {
    Animal myAnimal = new Animal();
    Animal myPig = new Pig();
    Animal myDog = new Dog();
    myAnimal.animalSound();
    myPig.animalSound();
    myDog.animalSound();
  }
}
گام های تمرین سریع
- کلاس والد با متد مشترک بساز.
- دو کلاس فرزند با extendsایجاد کن.
- متد را در هر فرزند بازنویسی کن و اجرا کن.
برای پایه چندریختی، فصل ارث بری را ببین. سپس درباره super بیشتر بخوان تا فراخوانی های والد را بهتر مدیریت کنی.
جمع بندی سریع
- چندریختی یعنی یک متد، چند رفتار.
- ارث بری راه را آماده می کند.
- فرزند متد را بازنویسی می کند.
- نوع والد، شیء فرزند را نگه می دارد.
- کد تمیزتر و منعطف تر می شود.
