آموزشsuper در جاوا

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

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

در این آموزش با کلمه کلیدی super در جاوا با کمک مثال آشنا می شوید.

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

 


جاوا

توی این پک فوق العاده، جاوا رو جوری یاد میگیری که تو هیچ کلاس آموزشی یا پک دیگه ای نه دیدی نه شنیدی! بدون هیچ کلاسی، با جاوا اپلیکیشن بزن، پروژه محور یاد بگیر و حسابی پول در بیار! 


 

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

۱- برای فراخوانی متد های سوپر کلاس که در زیر کلاس قرار دارد.

۲- برای دستیابی به ویژگی ها (فیلد ها) سوپر کلاس اگر هر دو سوپر کلاس و زیر کلاس دارای ویژگی هایی با همین نام باشند.

۳- برای فراخوانی سازنده ی سوپر کلاس بدون آرگومان (پیش فرض) یا سازنده پارامتری به جای سازنده زیر کلاس.

بیایید هر یک از این کاربردها را درک کنیم.

۱- دسترسی به متد های overridden سوپر کلاس

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

مثال ۱ : method overriding

  1. class Animal {
  2. // overridden method
  3. public void display(){
  4. System.out.println(“I am an animal”);
  5. }
  6. }
  7. class Dog extends Animal {
  8. // overriding method
  9. @Override
  10. public void display(){
  11. System.out.println(“I am a dog”);
  12. }
  13. public void printMessage(){
  14. display();
  15. }
  16. }
  17. class Main {
  18. public static void main(String[] args) {
  19. Dog dog1 = new Dog();
  20. dog1.printMessage();
  21. }
  22. }

خروجی

I am a dog

در این مثال ، با ساختن شی dog1 از کلاس Dog ، می توانیم متد ()printMessage را صدا بزنیم که متد ()display را اجرا می کند.

از آنجا که ()display در هر دو کلاس تعریف شده است ، متد زیر کلاس Dog متد سوپر کلاس Animal را نادیده می گیرد. از این رو ، ()display زیر کلاس صدا زده می شود.

 دسترسی به متد های overridden سوپر کلاس

اگر متد فراخوانی سوپر کلاس ها فراخوانی شود چه می شود؟

در صورت نیاز به فراخوانی متد display در سوپر کلاس Animal از() super.display استفاده می کنیم.

مثال ۲ : فراخوانی متد سوپر کلاس

  1. class Animal {
  2. // overridden method
  3. public void display(){
  4. System.out.println(“I am an animal”);
  5. }
  6. }
  7. class Dog extends Animal {
  8. // overriding method
  9. @Override
  10. public void display(){
  11. System.out.println(“I am a dog”);
  12. }
  13. public void printMessage(){
  14. // this calls overriding method
  15. display();
  16. // this calls overridden method
  17. super.display();
  18. }
  19. }
  20. class Main {
  21. public static void main(String[] args) {
  22. Dog dog1 = new Dog();
  23. dog1.printMessage();
  24. }
  25. }

خروجی

I am a dog

I am an animal

در اینجا ، چگونگی عملکرد برنامه بالا نشان داده شده است.

 فراخوانی متد display در سوپر کلاس Animal از() super.display استفاده می کنیم.

۲- دسترسی به متد های سوپرکلاس

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

مثال ۳ : به ویژگی سوپرکلاس دسترسی پیدا کنید

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

هنگامی که برنامه را اجرا می کنیم ، خروجی برابر خواهد بود با:

I am a mammal

I am an animal

در این مثال ، ما فیلد type مشابهی را هم در سوپر کلاس Animal و هم در زیر کلاس Dog تعریف کرده ایم.

سپس یک شی dog1 از کلاس Dog ایجاد کردیم و متد ()printType را با استفاده از این شی صدا زدیم.

در داخل تابع ،()printType

  • type به ویژگی زیر کلاس Dog بر می گردد.
  • super.type به ویژگی سوپر کلاس Animal اشاره دارد.

را چاپ می کند System.out.println(“ I am a “ + type); عبارت I am a mammal در اینجا

و

System.out.println(“ I am an”+super.type); عبارت I am an animal

را چاپ می کند.

۳- استفاده از super() برای دسترسی به سازنده سوپرکلاس

همانطور که می دانیم، زمانی که شی ای از کلاس ایجاد می شود، به صورت اتوماتیک سازنده ی پیش فرض صدا زده می شود.

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

مثال ۴ : استفاده از ()super

  1. class Animal {
  2. // default or no-arg constructor of class Animal
  3. Animal() {
  4. System.out.println(“I am an animal”);
  5. }
  6. }
  7. class Dog extends Animal {
  8. // default or no-arg constructor of class Dog
  9. Dog() {
  10. // calling default constructor of the superclass
  11. super();
  12. System.out.println(“I am a dog”);
  13. }
  14. }
  15. class Main {
  16. public static void main(String[] args) {
  17. Dog dog1 = new Dog();
  18. }
  19. }

خروجی

I am an animal

I am a dog

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

داخل سازنده ی زیر کلاس، عبارت ()super سازنده ی سوپر کلاس را صدا می زند و دستورات داخل آن را اجرا می کند. در اینجا ما خروجی I am an animal را مشاهده می کنیم.

استفاده از ()super

جریان برنامه سپس به سازنده زیر کلاس برمی گردد و دستورات باقی مانده را اجرا می کند. بنابراین ، I am a dog چاپ می شود.

استفاده از ()super اجباری نیست. حتی اگر از ()super در سازنده زیر کلاس استفاده نشده باشد ، کامپایلر بطور خودکار سازنده پیش فرض سوپر کلاس را صدا می کند.

اگر کامپایلر به طور خودکار ()super را فراخوانی می کند، چرا از کد های اضافه استفاده می کنیم؟

اگر سازنده پارامتری (سازنده ای که آرگومان می گیرد) سوپرکلاس را بخواهیم به جای سازنده زیر کلاس فرا بخوانیم ، لازم است.

()super پارامتری باید همیشه اولین جمله در بدنه سازنده زیر کلاس باشد ، در غیر این صورت خطای کامپایلر دریافت می کنیم.

مثال ۵ : فراخوانی سازنده ی پارامتری با استفاده از ()super

  1. class Animal {
  2. // default or no-arg constructor
  3. Animal() {
  4. System.out.println(“I am an animal”);
  5. }
  6. // parameterized constructor
  7. Animal(String type) {
  8. System.out.println(“Type: “+type);
  9. }
  10. }
  11. class Dog extends Animal {
  12. // default constructor
  13. Dog() {
  14. // calling parameterized constructor of the superclass
  15. super(“Animal”);
  16. System.out.println(“I am a dog”);
  17. }
  18. }
  19. class Main {
  20. public static void main(String[] args) {
  21. Dog dog1 = new Dog();
  22. }
  23. }

خروجی

Type: Animal

I am a dog

کامپایلر می تواند اتوماتیک سازنده ی بدون آرگومان را صدا بزند. با این حال نمی تواند سازنده ی پارامتری را صدا بزند.

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

فراخوانی سازنده ی پارامتری با استفاده از ()super

توجه داشته باشید که در مثال بالا ، صریحاً سازنده پارامتری (super(“Animal” را صدا زدیم. کامپایلر در این حالت سازنده پیش فرض سوپر کلاس را صدا نمی کند.

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

turned_in

چرب زبان

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


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

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

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

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

فهرست