آموزش Overriding در جاوا
سلام توسعه دهندگان عزیز در این سری از آموزش برنامه نویسی جاوا به آموزش Overriding در جاوا می پردازیم در ادامه مزایای استفاده از Overriding را خواهیم گفت و نحوه استفاده از Overriding را به شما آموزش خواهیم داد Overriding توانایی تعریف رفتار (Behavior) که مختص به یک subclass باشد را برای ما امکان پذیر خواهد کرد با ما همراه باشید.
در شئ گرایی overriding به معنای override کردن تابعی از متد فعلی است.
بهتر است یک مثال کاربردی را بررسی کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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 } } |
در بالا ما یک کلاس اصلی به نام Animal داریم در پایین تر از آن یک کلاس به نام Dog داریم که از Animal ما Extends شده است پس Dog هم نوعی از کلاس Animal به حساب می آید در متد main ما یک Instance از Animal ساختیم در ابتدا خود Animal را در آن ریختیم در متغیر دوم یا b ما instance از Dog را در Animal ریختیم چون Dog از Animal ما Extends شده بود می توانستیم instance Dog را در Animal بریزیم و در نهایت متد هایی که در Animal و Dog تعریف کرده بودیم را صدا بزنیم.
خروجی کد بالا همانند زیر خواهد بود.
1 2 | Animals can move Dogs can walk and run |
در بالا چون نام متودهای ما یکی بود خطای هنگام اجرا یا compile error نداشتیم به مثال بعدی توجه کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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(); } } |
در بالا کد همانند قبل است ولی یک متد به کلاس Dog اضافه شده است که نام آن در کلا Animal وجود ندارد بیایید خروجی را نگاه کنیم.
1 2 3 4 5 6 | TestDog.java:26: error: cannot find symbol b.bark(); ^ symbol: method bark() location: variable b of type Animal 1 error |
به علت اینکه در کلاس Animal متد bark وجود نداشته است خطا داده است زیر ما Dog را در instance animal قرار داده ایم در صورتی که Animal متدی به نام bark ندارد علت خطا نیز همین است پس می توان نتیجه گرفت هنگام overrding باید متودهایی که در کلاس اولی وجود دارد در کلاس دومی نیز وجود داشته باشد و همینطور بلعکس.
این آموزش هم به پایان رسید.
موفق و پیروز باشید.