oruji.github.io
oruji.github.ioPersian Tutorials
ویرایش: 1396/11/16 16:10
A A

آموزش overriding در جاوا

در زبان برنامه نویسی جاوا (Java) و مفاهیم شیء گرایی، هنگامی که یک کلاس تابعی را از کلاس پدر ارث بری کند، اگر آن تابع final نباشد، در این صورت این امکان وجود دارد که آن تابع را override کرد.

مزیت overriding این است که می توان رفتارهای کلاس پدر را در صورت نیاز در فرزند تغییر داد، بدین معنی که کلاس فرزند می تواند توابع کلاس پدر را برای خود پیاده سازی کند.

در مفاهیم شیءگرایی، overriding به معنی تغییر کارکرد یک تابع موجود در برنامه می باشد.

مثال:

به مثال زیر توجه کنید.

class Animal{ public void move(){ System.out.println("Animals can move"); } } class Dog extends Animal{ public void move(){ System.out.println("Dogs can walk and run"); } } public class TestDog{ public static void main(String args[]){ Animal a = new Animal(); // Animal reference and object Animal b = new Dog(); // Animal reference but Dog object a.move();// runs the method in Animal class b.move();//Runs the method in Dog class } }

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

Animals can move Dogs can walk and run

همانطور که در مثال بالا مشاهده کردید، شیء b با این وجود که از نوع Animal می باشد، ولی تابع move کلاس Dog را اجرا می کند. دلیل آن این است که: در زمان کامپایل، چک بر اساس کلاس مرجع یعنی کلاس Animal انجام می گیرد، در صورتی که در زمان اجرا، JVM متوجه نوع شیء شده و تابع کلاس Dog را اجرا می کند.

به همین جهت در مثال بالا، برنامه با این تصور که تابع move کلاس Animal درون شیء b است آن را کامپایل می کند. سپس در زمان اجرا تابع move کلاس فرزند یعنی Dog را اجرا می کند.

به مثال زیر توجه کنید:

class Animal{ public void move(){ System.out.println("Animals can move"); } } class Dog extends Animal{ public void move(){ System.out.println("Dogs can walk and run"); } public void bark(){ System.out.println("Dogs can bark"); } } public class TestDog{ public static void main(String args[]){ Animal a = new Animal(); // Animal reference and object Animal b = new Dog(); // Animal reference but Dog object a.move();// runs the method in Animal class b.move();//Runs the method in Dog class b.bark(); } }

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

TestDog.java:30: cannot find symbol symbol : method bark() location: class Animal b.bark(); ^

برنامه بالا، خطای زمان کامپایل ایجاد میکند، به این دلیل که شیء b از نوع مرجع Animal تابعی با نام bark ندارد.

قوانین override تابع