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

در این آموزش از سری آموزش های جاوا در مرکز درس می خواهیم شما را با کلمه کلیدی 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 را اجرا می کند.

بیشتر بخوانید :   آموزش متد POST در php

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

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

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

در صورت نیاز به فراخوانی متد 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

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

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

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

سوپر کلاس و زیر کلاس می توانند متد های هم نام داشته باشند. ما از کلمه کلیدی 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” را صدا زدیم. کامپایلر در این حالت سازنده پیش فرض سوپر کلاس را صدا نمی کند.

sasansorousheh

    نوشته‌های مرتبط

    دیدگاه‌ها

    *
    *