Override
override یا باز نویسی، یعنی اینکه ما کاری کنیم که متدهای کلاس پایه در داخل کلاس مشتق رفتار متفاوتی از خود نشان دهند. به عنوان مثال شما متد A را در کلاس A دارید و کلاس B از کلاس A ارث بری میکند، در این صورت متد A در کلاس B در دسترس خواهد بود. اما متد A دقیق همان متدی است که از کلاس A به ارث برده شده است. حال اگر بخواهید که این متد رفتار متفاوتی از خود نشان دهد چکار میکنید؟ Overriding یا بازنویسی این مشکل را برطرف میکند. به تکه کد زیر توجه کنید :
1: class Person 2: { 3: ShowMessage() 4: { 5: console.log("Message from Parent."); 6: } 7: } 8: 9: class Child extends Person 10: { 11: ShowMessage() 12: { 13: super.ShowMessage(); 14: console.log("ShowMessage method was overrided !"); 15: } 16: } 17: 18: var myPerson = new Person(); 19: var myChild = new Child(); 20: 21: myPerson.ShowMessage(); 22: console.log("\n"); 23: myChild.ShowMessage();
Message from Parent. Message from Parent. ShowMessage method was overrided !
همانطور که در کد بالا مشاهده میکنید، یک متد به نام ShowMessage (خطوط 6-3) در کلاس Person تعریف شده است که یک پیغام چاپ میکند. حال میخواهیم این متد در کلاس Child علاوه بر این پیغام پیغام !ShowMessage method was overrided را نیز چاپ کند. برای این کار همانطور که مشاهده میکنید همین متد را در خطوط (15-11) و در داخل کلاس Child مینویسیم و سپس با استفاده از کلمه کلیدی super در خط 13 به جاوااسکریپت اعلام میکنیم که قصد استفاده از تمام کدهای بدنه همین متد در کلاس مادر را داریم بعلاوه اینکه در خط بعد از این دستور یعنی خط 14 کدهای اضافی را که قرار است این متد در کلاس فرزند یعنی Child داشته باشد مینویسیم. شاید این کار برای متدی به این سادگی زیاد کارا نباشد، اما اگر متد کلاس مادر دارای کدهای زیادی در بدنه خود باشد و شما بخواهید کد دیگری در کلاس فرزند به آن اضافه کنید استفاده از این روش کدنویسی را بهینه و سادهتر میکند.