خب میرسیم به یکی دیگه از قابلیتهای مهم شیگرایی یعنی Polymorphism و یا چند ریختی. Polymorphism یا چند ریختی روش به شما اجازه میدهد تا توابع و متغیرهایی در برنامتون ایجاد کنید که در جاهای مختلف رفتار مختلفی رو نشون بدن.
در جاوا ۲ مدل Polymorphism یا چند ریختی داریم:
- زمان اجرا (پلی مورفیسم پویا)
- زمان کامپایل (پولی مورفیسم ایستا)
در مورد چندریختی زمان اجرا و یا Dynamic Polymorphism اینجوری میشه توضیح داد:
ما کلاسی داریم که از یک کلاس دیگر ارث بری میکند. ما میتوانیم توابع کلاس فرزند را همنام با کلاس پدر تعریف کنیم و اصطلاحا آن را Overide کنیم. برای درک بهتر مثال زیر رو ببینید:
package com.soroush; public class Polymorphism extends father{ @Override public void dataPrinter(String data) { System.out.println("in Meghdar az Class Farzand Chap Shode Ast"+data); } } class father{ private int a; private int b; public void dataPrinter(String data){ System.out.println("in Meghdar az Class Pedar Chap Shode Ast"+data); } }
در مثال بالا میبینید که تابع dataPrinter دارای ۲ پیادهسازی مختلف میباشد. زمانی که از کلاس Polymorphism شی بسازیم و این تابع رو صدا بزنیم، تابع درون Polymorphism صدا زده خواهد شد و در صورتی که از کلاس father شی بسازیم، تابع مربوط به کلاس father صدا خواهد شد.
در مورد چندریختی زمان کامپایل و یا Istatic Polymorphism میتوان اینجوری توضیح داد:
توابعی در کلاس که همنام هستند ولی هر یک ورودیهای مختلف را شامل میشوند و کارهای مختلف میکنند. مثال زیر رو مشاهده کنید:
package com.soroush; public class Polymorphism { public void dataPrinter(String data) { System.out.println("in Meghdar az Class Farzand Chap Shode Ast"+data); } public void dataPrinter(String data,String data2) { System.out.println("Meghdar Aval: "+data+", Meghdare Dovom: "+ data2); } public void dataPrinter(String data,String data2,String data3) { System.out.println("Meghdar Aval: "+data+", Meghdare Dovom: "+ data2 +", Meghdare Sevom: "+ data3); } }
در اینجا تابع dataPrinter دارای ۳ پیاده سازی متفاوت میباشد. اگر در طول برنامه بهش ۱ رشته پاس داده بشه، تابع اول، اگر ۲ تا پاس داده بشه تابع دوم و اگر ۳ تا پاس داده بشه تابع سوم اجرا میشه.
دیدگاهتان را بنویسید