آموزش متد Overriding در جاوا (به زبان کاملا ساده)

رتبه: 0 ار 0 رای sssss
آموزش متد Overriding در جاوا
نویسنده: تیم تولید محتوا زمان مطالعه 4 دقیقه
Banner Image

در این آموزش با کمک مثال ، با متد Overriding جاوا آشنا می شوید.

در آخرین آموزش ، در مورد وراثت توضیح دادیم. وراثت یک ویژگی OOP است که به ما امکان می دهد کلاس جدید (فرعی) را از کلاس موجود (سوپر کلاس یا کلاس اصلی) مشتق کنیم. زیر کلاس ویژگی ها و متد های سوپر کلاس را به ارث می برد.

حال اگر همان متد در سوپر کلاس و زیرکلاس تعریف شده باشد ، متد زیر کلاس، متد سوپر کلاس را نادیده می گیرد که به آن متد Overriding گفته می شود.

مثال ۱ : متد overriding

  1. class Animal {
  2. public void displayInfo() {
  3. System.out.println(“I am an animal.”);
  4. }
  5. }
  6. class Dog extends Animal {
  7. @override
  8. public void displayInfo() {
  9. System.out.println(“I am a dog.”);
  10. }
  11. }
  12. class Main {
  13. public static void main(String[] args) {
  14. Dog d1 = new Dog();
  15. d1.displayInfo();
  16. }
  17. }

خروجی

I am a dog.

در برنامه بالا ، متد ()displayInfo هم در سوپر کلاس Animal و هم در زیرکلاس Dog موجود است.

هنگامی که ما با استفاده از شی d1 (شیء فرعی) ()displayInfo را صدا می زنیم ، متد داخل زیر کلاس Dog فراخوانی می شود. متد ()displayInfo از سوپر کلاس Animal نادیده گرفته می شود.

متد overriding

در مثال ذکر شده به استفاده از حاشیه نویسی override توجه کنید. در جاوا ، حاشیه نویسی ابرداده ای است که برای کامپایلر، اطلاعات تهیه می کند. در اینجا ، حاشیه نویسیoverride برای کامپایلر مشخص می کند که متد بعد از این حاشیه نویسی غلبه بر متد سوپر کلاس را نشان می دهد.

استفاده از override الزامی نیست. با این حال ، هنگامی که از آن استفاده می کنیم ، متد باید کلیه قوانین مهم را رعایت کند. در غیر این صورت ، کامپایلر خطا می دهد.

قوانین overriding جاوا

  • هم سوپر کلاس و هم زیر کلاس باید دارای متد با نام یکسان باشند ، نوع برگشتی و لیست پارامترهای یکسان باید داشته باشند.
  • نمی توانیم متد هایی با عنوان final و static را نادیده بگیریم.
  • همیشه باید متد های انتزاعی سوپر کلاس را نادیده بگیریم.

کلید واژه super در Overridingجاوا

سؤالی متداول که هنگام Overriding در جاوا ایجاد می شود این است:

آیا می توانیم بعد از Overriding به متد سوپرکلاس دسترسی پیدا کنیم؟

جواب بله است. برای دسترسی به متد سوپر کلاس از زیر کلاس ، از کلید واژه super استفاده می کنیم.

چرب زبان

جاوا، جاوا اسکریپت رو قورت بده! بدون کلاس، سرعت 2 برابر، ماندگاری 3 برابر، پولسازی عالی با توسعه وب، ماشین لرنینگ و ... کتابخانه های پیشرفته جاوا اسکریپت و ... دانلود:

پک کامل جاوا اسکریپت  پک آموزش Node.js  پک React.js

پک کامل جاوا

پک مبانی برنامه نویسی (اختیاری-مکمل)

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

  1. class Animal {
  2. public void displayInfo() {
  3. System.out.println(“I am an animal.”);
  4. }
  5. }
  6. class Dog extends Animal {
  7. public void displayInfo() {
  8. super.displayInfo();
  9. System.out.println(“I am a dog.”);
  10. }
  11. }
  12. class Main {
  13. public static void main(String[] args) {
  14. Dog d1 = new Dog();
  15. d1.displayInfo();
  16. }
  17. }

خروجی

I am an animal.

I am a dog.

در مثال بالا ، در زیر کلاس Dog متد () displayInfo  از سوپر کلاس Animal، override شده است. یعنی نادیده گرفته می شود و متد () displayInfo  در کلاس Dog فراخوانی می شود.

وقتی متد ()displayInfo را با استفاده از شی d1 صدا می زنیم ، متد داخل زیرکلاس Dog فراخوانی می شود. متد داخل سوپر کلاس فراخوانی نمی شود.

در داخل ()displayInfo از زیر کلاس Dog ، ما از ()super.displayInfo برای فراخوانی ()displayInfo از سوپر کلاس استفاده کرده ایم.

توجه به این نکته مهم است که سازندگان در جاوا قابل ارث بری نیستند. از این رو ، چیزی به اسم constructor overriding در جاوا وجود ندارد.

با این حال ، می توانیم سازنده سوپرکلاس را از زیر کلاس های آن صدا بزنیم. برای همین ، از ()super استفاده می کنیم.

سطوح دسترسی در متد overriding

متدهای هم نامی که در سوپر کلاس و زیر کلاس تعریف شده اند می توانند نوع دسترسی متفاوتی دارند. با این وجود محدودیتی وجود دارد.

ما فقط می توانیم از آن دسته از مشخصه های دسترسی در زیر کلاس ها استفاده کنیم که دسترسی بزرگتر از مشخصه دستیابی سوپر کلاس دارند. مثلا،

فرض کنید ، یک متد ()myClass در سوپر کلاس protected است. سپس ، همان متد ()myClass در زیر کلاس می تواند public یا protected شود اما private نمی تواند باشد.

مثال ۳ : سطوح دسترسی در Overriding

  1. class Animal {
  2. protected void displayInfo() {
  3. System.out.println(“I am an animal.”);
  4. }
  5. }
  6. class Dog extends Animal {
  7. public void displayInfo() {
  8. System.out.println(“I am a dog.”);
  9. }
  10. }
  11. class Main {
  12. public static void main(String[] args) {
  13. Dog d1 = new Dog();
  14. d1.displayInfo();
  15. }
  16. }

در مثال بالا ، زیر کلاس Dog متد ()displayInfo از سوپر کلاس Animal را نادیده می گیرد.

هرگاه با استفاده از d1 متد ()displayInfo را صدا بزنیم ، متد داخل زیر کلاس صدا زده می شود.

توجه داشته باشید که ()displayInfo در سوپر کلاس Animal از نوع protected است. در همین متد مشخصه دسترسی public در زیر کلاس Dog وجود دارد. این امر به دلیل امکان دسترسی بیشتر از protected امکان پذیر است.

overriding (نادیده گرفتن) متد های انتزاعی(abstract)

در جاوا کلاس های انتزاعی به عنوان سوپرکلاس سایر کلاس ها ایجاد می شوند. اگر یک کلاس شامل یک متد abstract باشد ، نادیده گرفتن آن اجباری است.

profile name
تیم تولید محتوا

بخندید کتاب بخونید و خوب باشید تا جامعه مون به آرامش برسه. لطفا ! هر سوالی دارید در بخش نظرات مطرح کنید. ما یا سایر هموطنان عزیز پاسخ خواهیم داد. برای کمک به سایت ما و گسترش آموزش در بین هموطنان، در سایتها، وبلاگ ها و شبکه های اجتماعی لینک سایت ما را درج کنید.

مطالب پیشنهادی برای شما

محصولات مرتبط

مشاهده همه

دیدگاهتان را بنویسید

1 2 3 4 5

0 نظر درباره «آموزش متد Overriding در جاوا (به زبان کاملا ساده)»

    هنوز نظری برای این بخش ثبت نشده است
مشاهده همه نظرات
سبد خرید
سبد خرید شما خالی است
× جهت نصب روی دکمه زیر در گوشی کلیک نمائید
آی او اس
سپس در مرحله بعد برروی دکمه "Add To Home Screen" کلیک نمائید