polymorphism یا چند ریختی در جاوا

ناصر نادری | 1393/12/09


بنام خدا : سومین بخش از سری آموزش شی گرایی در جاوا رو با مبحث polymorphism  ادامه میدیم .

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

توی مثال زیر یک آبجکت از نوع کلاس  Nokia و با نوع ارجاع  Phone ساختیم  . وقتی از این آبجکت  متد ring رو فراخوانی میکنیم , متد کلاس Nokia فراخوانی میشه .

 public class Phone
{
    public void ring() //متد کلاس پایه یا والد
    {
        System.out.println ("Phone Is Ringing");
    }
}

public class Nokia extends Phone
{
    public void ring() //متد کلاس فرزند
    {
        System.out.println ("Nokia Phone Is Ringing");
    }
}
    public class Test
    {
        public static void main (String args[]) {
        Phone obj1 = new Phone(); // ارجاع و آبجکت از نوع کلاس والد
        Phone obj2 = new Nokia(); // ارجاع از نوع والد ولی آبجکت از نوع کلاس فرزند
        obj1.ring();
        obj2.ring();
    }
}

خروجی برنامه بالا :

Phone Is Ringing
Nokia Phone Is Ringing 

 

این نوع چند شکی یا polymorphism  در واقع Polymorphism زمان اجرا یا داینامیک هست .

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

 class Phone
{
    void call(string contactName)
    {
        System.out.println ("Calling By Contact : " + contactName);
    }
    void call(long phoneNumber)
    {
        System.out.println ("Calling By Phone Number : " + phoneNumber);
    }
    void call(string callId,int mode) {
        System.out.println("Calling By Call ID : " + callId);
        return num;
    }
}

class Test
{
public static void main (String args [])
{
    Phone Obj = new Phone();
    Obj.call("Naser");// فراخوانی متدی که با نام تماس میگیره
    Obj.call(9659561212);//فراخوانی متدی که با شماره تلفن تماس میگیره 
    Obj.call("125a46ds56",1);// فراخوانی متدی که با شناسه کاربری و تعیین حالت تماس میگیره

}
} 

حالا ما آبجکتی داریم که میتونه متدی رو با بدنه های مختلف فراخوانی کنه . یعنی چند شکل یا چند فرمی . دقت کنید تعداد و نوع پارامترهای پاس داده شده به متدها تعیین کننده این هست که کدوم اجرا بشه .

این مبحث خیلی مفصل هست ولی من برای سادگی سعی کردم یه خلاصه از این مبحث رو بصورت قابل فهم براتون بنویسم .

تا جلسه بعد در پناه عالم بی پایان ....


فایلهای ضمیمه
توجه! هیچ فایل ضمیمه ای برای این مطلب یافت نشد

نظرات شما نظر جدید