با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن. و کاربرانی که دوره کامل آموزش برنامه نویسی جاوا را دنبال می کنند. در بخش قبلی ما در مورد سوپر کلاس ها و زیر کلاس صحبت کردیم. اگر یک کلاس یک ابر کلاس خود را به ارث برساند، در این صورت فرصتی برای متوقف کردن متدی وجود دارد که مشخص نشده است. مزیت اصلی این است که توانایی تعریف رفتار خاصی که به نوع زیر کلاس می دهد، به این معنی که یک زیر کلاس می تواند یک کلاس والد بر اساس نیازش اجرا کند. در شرایط شیء گرایی، ویژگی overriding در جاوا به معنای لغو کردن عملکرد یک متد موجود است، برای درک بهتر این مفاهیم و آشنایی با ویژگی overriding در جاوا در ادامه ی این آموزش با ما همراه باشید.
در ادامه ی مباحث این بخش شما را با ویژگی overriding در جاوا با ارائه ی چند مثال آشنا می کنیم.
همانطور که گفتیم از ویژگی overriding در جاوا برای لغو عمل یک متد استفاده می شود.
برای نمونه به مثال زیر توجه کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <span style="font-family: tahoma, arial, helvetica, sans-serif;">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 } }</span> |
نتیجه ی اجرای کد فوق در جاوا بصورت زیر خواهد بود:
1 2 | <span style="font-family: tahoma, arial, helvetica, sans-serif;">Animals can move Dogs can walk and run</span> |
در مثال فوق شما می توانید ببینید که حتی اگر b از نوع حیوان باشد، متد move در کلاس Dog اجرا می شود.
دلیل این امر این است: در زمان کامپایل، Check بر روی نوع مرجع ساخته می شود.
با این حال، در زمان اجرا، JVM نوع شیء را مشخص می کند و متد که متعلق به آن را اجرا می کند.
بنابراین، در مثال فوق، برنامه به درستی کامپایل خواهد شد، زیرا کلاس Animal دارای متد move است.
سپس، در زمان اجرا، متد خاص برای آن شی را اجرا می کند.
مثال زیر را در نظر بگیرید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <span style="font-family: tahoma, arial, helvetica, sans-serif;">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(); } }</span> |
نتیجه ی اجرای کد فوق بصورت زیر است:
1 2 3 4 5 6 | <span style="font-family: tahoma, arial, helvetica, sans-serif;">TestDog.java:26: error: cannot find symbol b.bark(); ^ symbol: method bark() location: variable b of type Animal 1 error</span> |
این برنامه یک خطای زمان کامپایل را از نوع مرجع b می گیرد. چراکه Animal یک متد با نام bark ندارد.
مثال: اگر متد در سوپر کلاس بصورت عمومی اعلام شود، متد subclass نمی تواند خصوصی یا محافظت شده باشد.
کلمه ی کلیدی super در یک متد لغو شده ی ابر کلاس استفاده می شود:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <span style="font-family: tahoma, arial, helvetica, sans-serif;">class Animal { public void move() { System.out.println("Animals can move"); } } class Dog extends Animal { public void move() { super.move(); // invokes the super class method System.out.println("Dogs can walk and run"); } } public class TestDog { public static void main(String args[]) { Animal b = new Dog(); // Animal reference but Dog object b.move(); // runs the method in Dog class } }</span> |
نتیجه ی اجرای کد فوق در جاوا بصورت زیر خواهد بود:
1 2 | <span style="font-family: tahoma, arial, helvetica, sans-serif;">Animals can move Dogs can walk and run</span> |
در این بخش یاد گرفتیم که ویژگی overriding در جاوا در بحث شیء گرایی چه طور عملکرد یک متد را لغو می کند. و همچنین با قوانین و ویژگی های overriding در جاوا نیز آشنا شدیم. در بخش بعدی به مباحث پلی مورفیسم در جاوا اشاره خواهیم کرد.