C:\Users\Mr\Desktop\method-overriding-in-java.png

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

folderشی گرایی
commentsبدون دیدگاه
اساطیر زبان

در این آموزش با کمک مثال ، با متد 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 نادیده گرفته می شود.

C:\Users\Mr\Desktop\method-overriding-in-java.png

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

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

قوانین overriding جاوا

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

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

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

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

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

مثال ۲ : استفاده از کلمه کلیدی 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 باشد ، نادیده گرفتن آن اجباری است.

تفاوت پک های حرفه ای ما با آموزشهای رایگان: بطور خلاصه از زمین تا آسمان! 1-پکها، جدیدترین نسخه نرم افزارها را آموزش می دهند با قابلیت های بسیار بیشتر. 2-پکها توسط متخصص آن نرم افزار، به صورت کاملا پروژه محور و با حل چالش هایی که در مسیر کار عملی و حرفه ای با آن روبرو می شوید تهیه شده اند و بعد از استفاده، کاملا برای بازار کار آماده اید! 3- متد این پکها کاملا کار شده و تا ماهها، در ذهن تان ماندگارند و یادگیری بسیار سریعتر و کاملتری خواهید داشت. آموزشهای رایگان فقط دستورات نرم افزارها را (آنهم ناقص) بیان می کنند و تازه برای ورود به بازار باید ماهها تجربه عملی هم کسب کنید !!

turned_in

چرب زبان

با این اپلیکیشن ساده، هر زبانی رو فقط با 5 دقیقه در روز، توی 80 روز مثل بلبل حرف بزن! بهترین متد روز، تقویت حافظه، آموزش تصویری. یادگیری زبان کلید یادگیری هر مهارتی در قرن 21 !


حتما بخوانید!

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست