در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

آموزش جاوا (Java) قسمت 34 : Override کردن متد ها

با سلام به همه دوستان و همراهان Itpro. در مطالب قبلی در مورد کلاس های والد و کلاس های فرزند و وراثت کلاس ها صحبت کردیم. همانطور که گفتیم در وراثت متدهای کلاس والد نیز به کلاس فرزند به ارث می رسد. حال اگر بخواهیم همان متدها را بازنویسی کنیم باید چه کنیم. عمل باز نویسی متدهای به ارث رسیده را override کردن متد گویند. برای این که بتوانیم یک متد را که به ارث رسیده است را override کنیم نباید این متد در کلاس والد به صورت final تعریف شده باشد. فایده ای که override کردن متدها این است که کلاس والد یک متد را تعریف می کند که کلیات و اساس یک کار را انجام می دهد و هر کلاس فرزند می تواند با توجه به نیاز خود اعمالی را به این متد اضافه کند. به این معنی که به یک کاربرد اعمال دیگری را اضافه کنیم. برای مثال به برنامه زیر دقت کنید:

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 است ولی با شیئی از کلاس Dog مقداردهی شده است. پس هنگامی که این متد move از این کلاس را فراخوانی می کنیم متد move مربوط به کلاس Dog اجرا می شود. دلیل این عمل این است که عمل چک کردن نوع شئ هنگام کامپایل بررسی می شود و چون نوع شئ را با کلاس 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 بوده و کلاس Animal متدی به نام bark ندارد و این متد مربوط به کلاس Dog است. پس اگر متدی در کلاس والد موجود باشد و ما آن را در کلاس فرزند override نماییم، حال اگر شئی از نوع کلاس والد تعریف کنیم ولی با یک شئ کلاس فرزند مقدار دهی نماییم در این صورت متدهایی که فراخوانی می کنیم متدهای کلاس فرزند خواهد بود. اما اگر متدی فقط مربوط به کلاس فرزند باشد با استفاده از این روش نمی توان آن متد را فراخوانی نمود.

قوانین override کردن متدها

قواعد و قوانین زیر هنگام override کردن متدها صادق است.

  • پارامترهای ورودی متد مربوط به کلاس فرزند باید دقیقا همانند پارامترهای ورودی متد مربوط به کلاس پدر باشد و هم از نظر تعداد پارامترها و هم از نظر نوع پارامتر ها یکی باشد.
  • نوع بازگشتی متد override شده باید همنوع نوع بازگشتی متد کلاس پدر باشد و یا یک زیرنوع (sybtype) از نوع بازگشتی متد کلاس پدر باشد.
  • سطح دسترسی متد کلاس فرزند نمی تواند محدود تر از کلاس پدر باشد برای مثال اگر در کلاس والد متد به شکل public تعریف شده است متد override شده نمی تواند private یا protected باشد.
  • متدی که به صورت final تعریف شده باشد نمی تواند override شود.
  • متدی که به صورت static تعریف شود را نمی توان override کرد اما می توان دوباره تعریف کرد.
  • اگر نمی توان متدی را به ارث برد نمی توان آن را override کرد.
  • در داخل یک پکیج یک کلاس فرزند می تواند همه متدهایی که در کلاس والد خود دارد و به عنوان final یا private تعریف نشده است را override کند. اما اگر در پکیج دیگر باشد متد کلاس والد باید final نباشد و همچنین public یا protected نیز باشد.
  • یک متد override شده در کلاس فرزند می تواند هر exception چک نشده ای را فراخوانی کند بدون این که لازم باشد که متد کلاس والد هم آن exception را فراخوانی کرده باشد. اما در مورد exception های چک شده متد کلاس فرزند نمی تواند exception های چک شده ی بیشتر از متد کلاس والد را صدا کند.

استفاده از کلمه کلیدی super

به عنوان یاد آوری می گوییم که برای این که در داخل متد override شده بتوانیم متد کلاس والد را فراخوانی کنید از کلمه کلیدی super استفاده می کنیم برای مثال به برنامه زیر توجه کنید:

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

   }
}

خروجی برنامه بالا به شکل زیر خواهد بود:

Animals can move
Dogs can walk and run

Itpro باشید

نویسنده: مهدی عادلی فر

منبع: جزیره برنامه نویسی و توسعه نرم افزار وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد.

#برنامه_نویسی_جاوا #آموزش_برنامه_نویسی_جاوا #انواع_وراثت_در_جاوا #override_کردن_متدها_در_جاوا #آموزش_برنامه_نویسی_شئ_گرا #وراثت_در_برنامه_نویسی_شئ_گرا #آموزش_جاوا #تعریف_متدها_در_جاوا #شئ_گرایی_در_جاوا #دوره_آموزشی_جاوا
عنوان
1 آموزش جاوا (Java) قسمت 1 : معرفی ، خصوصیات و شروع به کار رایگان
2 آموزش جاوا (Java) قسمت 2 : شی گرایی قسمت یک رایگان
3 آموزش جاوا (Java) قسمت 3: شی گرایی قسمت دو رایگان
4 آموزش جاوا (Java) قسمت 4 : شی گرایی قسمت سه رایگان
5 آموزش جاوا (Java) قسمت 5 : انواع داده رایگان
6 آموزش جاوا (Java) قسمت 6 : انواع متغیر رایگان
7 آموزش جاوا (Java) قسمت 7 : Modifier ها رایگان
8 آموزش جاوا (Java) قسمت 8 : عملگرها قسمت یک رایگان
9 آموزش جاوا (Java) قسمت 9 : عملگرها قسمت دو رایگان
10 آموزش جاوا (Java) قسمت 10 : حلقه های تکرار رایگان
11 آموزش جاوا (Java) قسمت 11 : عبارات شرطی رایگان
12 آموزش جاوا (Java) قسمت 12 : کلاس Wrapper اعداد رایگان
13 آموزش جاوا (Java) قسمت 12 : کلاس Wrapper اعداد رایگان
14 آموزش جاوا (Java) قسمت 14: کلاس Wrapper کاراکترها رایگان
15 آموزش جاوا (Java) قسمت 15 : کلاس String و کار با رشته قسمت یک رایگان
16 آموزش جاوا (Java) قسمت 16 : کلاس String و کار با رشته قسمت دو رایگان
17 آموزش جاوا (Java) قسمت 17 : کلاس String و کار با رشته قسمت سه رایگان
18 آموزش جاوا (Java) قسمت 18 : کلاس String و کار با رشته قسمت چهار رایگان
19 آموزش جاوا (Java) قسمت 19 : StringBuilder و StringBuffer رایگان
20 آموزش جاوا (Java) قسمت 20 : استفاده از آرایه ها رایگان
21 آموزش جاوا (Java) قسمت 21 : آموزش کار با تاریخ رایگان
22 آموزش جاوا (Java) قسمت 22 : عبارات منظم (Regular Expression) رایگان
23 آموزش جاوا (Java) قسمت 23 : تعریف و استفاده از متدها قسمت یک رایگان
24 آموزش جاوا (Java) قسمت 24 : تعریف و استفاده از متدها قسمت دو رایگان
25 آموزش جاوا (Java) قسمت 25 : کار با استریم ها و فایل ها رایگان
26 آموزش جاوا (Java) قسمت 26 : کار با دایرکتوری ها رایگان
27 آموزش جاوا (Java) قسمت 27 : کلاس ByteArrayInputStream رایگان
28 آموزش جاوا (Java) قسمت 28 : معرفی کلاس File و متدها رایگان
29 آموزش جاوا (Java) قسمت 29 : معرفی و شرح Exception ها قسمت 1 رایگان
30 آموزش جاوا (Java) قسمت 30 : معرفی و شرح Exception ها قسمت 2 رایگان
31 آموزش جاوا (Java) قسمت 31 : معرفی و شرح Exception ها قسمت 3 رایگان
32 آموزش جاوا (Java) قسمت 32 : استفاده از انوع کلاس های داخلی رایگان
33 آموزش جاوا (Java) قسمت 33 : وراثت کلاس ها و انواع آن رایگان
34 آموزش جاوا (Java) قسمت 34 : Override کردن متد ها رایگان
35 آموزش جاوا (Java) قسمت 35 : چند ریختی (Polymorphism) رایگان
36 آموزش جاوا (Java) قسمت 36 : Enum و ویژگی های آن رایگان
37 آموزش جاوا (Java) قسمت 37 : معرفی Abstract رایگان
38 آموزش جاوا (Java) قسمت 38 : استفاده از کپسول بندی (Encapsulation) رایگان
39 آموزش جاوا (Java) قسمت 39 : استفاده از اینترفیس ها رایگان
40 آموزش جاوا (Java) قسمت 40 : پکیج(Package) و نحوه استفاده رایگان
41 آموزش جاوا (Java) قسمت 41 : معرفی داده ساختارها Enumeration رایگان
42 آموزش جاوا (Java) قسمت 42 : داده ساختار BitSet رایگان
43 آموزش جاوا (Java) قسمت 43 : داده ساختار Vector رایگان
44 آموزش جاوا (Java) قسمت 44 : داده ساختار Stack (پشته) رایگان
45 آموزش جاوا (Java) قسمت 45 : داده ساختار Dictionary رایگان
46 آموزش جاوا (Java) قسمت 46 : داده ساختار Hashtable رایگان
47 آموزش جاوا (Java) قسمت 47 : داده ساختار Properites رایگان
48 آموزش جاوا (Java) قسمت 48 : معرفی و آموزش جنریک (Generic) رایگان
49 آموزش جاوا (Java) قسمت 49 : برنامه نویسی سوکت و شبکه قسمت 1 رایگان
50 آموزش جاوا (Java) قسمت 50 : برنامه نویسی سوکت و شبکه قسمت 2 رایگان
51 آموزش جاوا (Java) قسمت 51 : استفاده از Lambda Expression رایگان
52 آموزش جاوا (Java) قسمت 52 : Thread و Multi-Threading رایگان
53 آموزش جاوا (Java) قسمت 53 : Runnable در Thread و Multi-Threading رایگان
54 آموزش جاوا (Java) قسمت 54 : کلاس Thread و متدها رایگان
زمان و قیمت کل 0″ 0
0 نظر

هیچ نظری ارسال نشده است! اولین نظر برای این مطلب را شما ارسال کنید...

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره پاییزه می تونی امروز ارزونتر از فردا خرید کنی ....