چندریختی (برنامه‌نویسی)
یکی از ویژگی‌های کلیدی در کلاس‌های مشتق‌شده، این است که یک اشاره‌گر به یک کلاس مشتق‌شده، از نظر نوع داده‌ای با اشاره‌گر، به کلاس اصلی آن سازگار است. چندریختی یا(به انگلیسی: Polymorphism)پلی‌مورفیسم، هنر بهره‌برداری از این ویژگی ساده و در عین حال قدرتمند و کاربردی است که متدلوژی شی‌گرایی را به حد کامل توانایی‌اش می‌رساند.
مفهوم چندریختی ویژگی است که به رابط‌ها امکان می‌دهد تا برای گروهی از عملیات‌ها مورد استفاده قرار گیرند. در این مقاله مفهوم چندریختی از طریق دو مفهوم بازنویسی متدها (به انگلیسی: override) و سربارشده (به انگلیسی:Overload) پشتیبانی می‌شود. ما با بررسی این دو مفهوم به
دنبال بررسی تأثیر مفهوم چندریختی روی برنامه‌نویسی شیء گرا هستیم. روش به کار برده شده در این تحقیق، مطالعه منابعی از جمله کتب مرتبط با برنامه‌نویسی، راهنمای برنامه‌های شیء گرا و اجرای برنامه‌هایی با ماهیت چندریختی است. با توجه به مطالب ارائه شده در این مقاله می‌توان گفت که مفهوم چندریختی یکی از سه اصول مهم در برنامه‌نویسی شیء گرا است. در نتیجه مفاهیم نهان‌سازی و وراثت به همراه مفهوم چندریختی سه رکن اصلی برنامه‌نویسی شئ‌گرا را تشکیل می‌دهند. کلمات کلیدی: چندریختی، سربار کردن، لغو کردن و متد.
در برنامه‌های شئ گرا مانند جاوا، این امکان فراهم شده تا دو یا بیش از دو متد همنام در یک کلاس تعریف نمود، مشروط بر اینکه تعریف پارامترهای آن متفاوت باشد. در این موارد متدها سربار می‌شوند. از چندریختی به منظور تعیین انواع مختلف متدهای پویا، در زمان اجرا استفاده می‌شود؛ که این یکی از قدرتمندترین امکاناتی است که چندریختی به وجود می‌آورد. مفاهیم سربار کردن و لغو کردن متدها از جمله مفاهیمی هستند که چندریختی بر پایهٔ آن‌ها بنا می‌شود. در این مقاله پس از بررسی اجمالی مفهوم چندریختی در بخش اول، در بخش دوم، مفهوم سربار کردن متدها را با ذکر چند مثال خواهیم دید. در بخش سوم نیز مفهوم متدهای لغو شده یا همان توابع مجازی را خواهیم آورد و در بخش پایانی نیز به بررسی تأثیر وجود مفهوم چندریختی در برنامه‌نویسی شیءگرا 《مانند جاوا》 و مقایسهٔ آن با برنامه‌هایی که چندریختی را پشتیبانی نمی‌کنند 《مانند زبان برنامه‌نویسی C》 خواهیم پرداخت.
به عنوان مثال یک پشته (فهرستی که آنچه آخر به آن وارد شود، اول خارج می‌شود) را در نظر می‌گیریم. ممکن است برنامه‌ای داشته باشیم که به سه نوع پشته نیاز دارد. پشته‌ای برای مقادیر صحیح، پشته‌ای برای مقادیر اعشاری با ممیز شناور و پشتهٔ دیگری برای کاراکترها مورد استفاده قرار می‌گیرد. به‌طور کلی، چندریختی به وسیلهٔ عبارت «یک رابط، چند متد» بیان می‌شود. این امر با فراهم ساختن امکان استفاده از یک رابط برای مشخص کردن یک کلاس عمومی از عملیات، به کاهش پیچیدگی کمک می‌کند؛ و این کامپایلر است که عمل مورد نظر را (یعنی متد مربوطه) متناسب با هر یک از شرایط انتخاب می‌کند. به عنوان مثال حس بویایی سگ‌ها نمونه‌ای از چندریختی می‌باشد. چنانچه بوی گربه‌ای به مشام سگی برسد، در آن صورت واق واق می‌کند و به دنبال گربه خواهد رفت. اما اگر بوی غذا به مشامش برسد، بزاق آن ترشح خواهد کرد و به طرف ظرف غذا خواهد رفت. در هر دو شرایط مزبور، یک نوع حس بویایی کار می‌کند. تفاوت این دو حالت، بویی است که به مشام سگ می‌رسد. یعنی، نوع داده‌ای که بینی سگ بر روی آن کار انجام می‌دهد!
از طریق کاربرد اصول شیءگرا، بخش‌های گوناگون یک برنامهٔ پیچیده را می‌توان ترکیب نمود و موجودیتی یکپارچه، با استحکام و قابل مدیریت تشکیل داد.
در ادامه مثالی از سازنده‌های سربار شده نمایش داده شده‌است. در این مثال کلاس Book طراحی شده‌است که دارای سه سازنده با امضاهای متفاوت می‌باشد. public class Book{ }نحوه ساخت ارجاعی از نوع این کلاس به یکی از روش‌های زیر قابل انجام است.Book newBook = new Book(); Book newBook = new Book("Shahnameh"); Book newBook = new Book("Shahnameh", "Ferdosi");