JavaRush /وبلاگ جاوا /Random-FA /تفاوت بین این و کلمات کلیدی فوق العاده در جاوا
grishin
مرحله
Харьков

تفاوت بین این و کلمات کلیدی فوق العاده در جاوا

در گروه منتشر شد
thisو superدو کلمه کلیدی خاص در جاوا هستند که به ترتیب نمونه فعلی یک کلاس و سوپرکلاس آن را نشان می دهند. برنامه نویسان جاوا اغلب این کلمات را اشتباه می گیرند و از ویژگی های خاص آنها آگاهی کمی نشان می دهند که اغلب در مصاحبه های Java Core در مورد آنها سؤال می شود. به عنوان مثال، چند سوالی که بلافاصله به ذهن خطور می کند در مورد thisو super، آیا می توان به یک کلمه کلیدی thisدر جاوا معنای متفاوتی نسبت داد؟ و تفاوت بین کلمات کلیدی thisو superدر جاوا چیست. نمیدانم؟ خوب، من پاسخی را در اینجا نمی دهم - می توان آن را در انتهای مقاله یافت. تفاوت بین این و کلمات کلیدی فوق العاده در جاوا - 1بنابراین، همانطور که در ابتدا گفتم، تفاوت اصلی بین thisو superدر جاوا این است که thisنمونه فعلی یک کلاس را نشان می دهد، در حالی که superنمونه فعلی کلاس والد نشان می دهد. در اینجا یک مثال از استفاده از متغیرها آورده شده است this- superاحتمالاً قبلاً نمونه هایی از فراخوانی سازنده های یکی از دیگری را دیده اید، به اصطلاح. فراخوانی سازنده ها در یک زنجیره، این امر از طریق استفاده از کلمات کلیدی thisو super. در داخل یک کلاس، برای فراخوانی سازنده بدون آرگومان آن، از آن استفاده می‌شود this()، در حالی که super()از آن برای فراخوانی سازنده بدون آرگومان، یا همانطور که به آن سازنده پیش‌فرض کلاس والد نیز گفته می‌شود، استفاده می‌شود. به هر حال، به این ترتیب شما می توانید نه تنها یک سازنده بدون آرگومان، بلکه هر سازنده دیگری را با دادن پارامترهای مناسب به آن فراخوانی کنید. به زودی نمونه ای از این thisاستفاده را خواهیم دید super. همچنین در thisجاوا superبرای دسترسی به متغیرهای نمونه کلاس و والد آن استفاده می شود. در واقع، آنها را می توان بدون پیشوندها superو this, اما به شرطی که در بلوک فعلی چنین متغیرهایی با متغیرهای دیگر همپوشانی نداشته باشند. اگر حاوی متغیرهای محلی با نام های مشابه نباشد، در غیر این صورت باید از نام هایی با پیشوند استفاده کنید، اما این مهم نیست، زیرا در این شکل آنها حتی بیشتر خوانا هستند. یک مثال کلاسیک از این رویکرد، استفاده از آن thisدر داخل سازنده ای است که پارامتری همنام با متغیر نمونه می گیرد. بعداً در مقاله خواهیم فهمید که چه تفاوت های دیگری بین superو وجود دارد thisو به چند نمونه از کاربرد آنها نگاه خواهیم کرد.

چقدر این و فوق العاده شبیه هم هستند

قبل از بررسی تفاوت بین کلمات کلیدی thisو super, اجازه دهید برخی از شباهت های آنها را بررسی کنیم:
  1. هر دو this، و superمتغیرهای غیر ایستا هستند، بنابراین نمی توان آنها را در یک زمینه استاتیک استفاده کرد، به این معنی که نمی توان آنها را در روش اصلی استفاده کرد. این منجر به یک خطای زمان کامپایل می شود "یک متغیر غیر ایستا thisنمی تواند از یک زمینه ایستا ارجاع شود". همین اتفاق می افتد اگر از کلمه کلیدی در روش اصلی استفاده کنید super.

  2. هر دو this، و superمی توانند در داخل سازنده ها برای فراخوانی سازنده های دیگر در یک زنجیره استفاده شوند، به عنوان مثال، this() و super() سازنده را بدون آرگومان های کلاس های ارث بری و والد فراخوانی می کنند.
در مثال زیر، ابتدا فراخوانی از یک سازنده بدون آرگومان کلاس B به سازنده ای از همان کلاس B ارسال می کنیم که یک پارامتر از نوع را می گیرد String، که به نوبه خود super("")سازنده یک آرگومان را از سوپرکلاس فراخوانی می کند.
class A{

    A(){
        System.out.println("Конструктор без аргументов класса A");
    }

    A(String args){
        System.out.println("Конструктор с одним аргументом класса A");
    }
}

class B extends A{

   B(){
        this(""); // вызов конструктора с одним аргументом класса B
        System.out.println("Конструктор без аргументов класса B");
    }

   B(String args){
        super(""); // вызов конструктора с одним аргументом класса A
        System.out.println("Конструктор с одним аргументом класса B");
    }
}

// Тест-класс и вывод
public class Test {

    public static void main(String args[]) {
       B b = new B();
    }

}
خروجی: سازنده تک آرگومان کلاس A سازنده تک آرگومان کلاس B سازنده بدون آرگومان کلاس B
  1. در داخل سازنده this، و superباید در همان ابتدا بالاتر از تمام عبارات دیگر ظاهر شود، در غیر این صورت کامپایلر یک پیغام خطا صادر می کند. که از آن نتیجه می شود که یک سازنده نمی تواند هر دو را داشته باشد this()و super().

تفاوت بین سوپر و این

اکنون می دانیم که چگونه از کلمات کلیدی استفاده کنیم superو thisدلیل نیاز آنها را درک می کنیم. اما گزینه دیگری برای استفاده از این کلمات کلیدی وجود دارد که من به آن اشاره نکردم - در کلاس های داخلی، جایی که با کمک آنها می توان به یک کلاس بیرونی با استفاده از فرم نمادگذاری Outer مراجعه کرد. thisبرای نمونه فعلی و بیرونی آن. super- برای پدر و مادرش فراموش نکنید که نام کلاس بیرونی را جایگزین Outer کنید. اکنون به طور خلاصه تفاوت های اصلی بین کلمات کلیدی thisوsuper
  1. یک متغیر thisبه نمونه فعلی کلاسی که در آن استفاده می شود اشاره دارد، در حالی که superبه نمونه فعلی کلاس والد اشاره دارد.

  2. هر سازنده، در غیاب فراخوانی صریح به سازنده های دیگر، به طور ضمنی super()سازنده بدون آرگومان کلاس والد خود را فراخوانی می کند، اما شما همیشه این گزینه را دارید که به طور صریح هر سازنده دیگری را با یا، this()یا فراخوانی کنید super().
این احتمالاً تمام چیزی است که می توان در مورد تفاوت بین کلمات کلیدی thisو superدر جاوا و نحوه استفاده از آنها در برنامه ها گفت. همانطور که دیدیم، هدف اصلی آنها فراخوانی یک سازنده از سازنده دیگر و ارجاع به متغیرهای نمونه اعلام شده در کلاس فعلی و کلاس والد آن است. فراموش نکنید که اینها دقیقاً متغیرهای معمولی نیستند و اکنون - پاسخ سؤال من که در پاراگراف اول پرسیدم. خیر، به یک متغیر thisنمی توان مقدار جدیدی نسبت داد زیرا نهایی اعلام شده است. می توانید سعی کنید این کار را در IDE انجام دهید - یک خطای کامپایل دریافت خواهید کرد "شما نمی توانید یک مقدار جدید را به یک متغیر اختصاص دهید this- نهایی اعلام می شود." مقاله اصلی اینجا
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION