JavaRush /Java Blogu /Random-AZ /Java-da bu və super açar sözlər arasındakı fərq
grishin
Səviyyə
Харьков

Java-da bu və super açar sözlər arasındakı fərq

Qrupda dərc edilmişdir
thissupermüvafiq olaraq sinifin və onun super sinifinin cari nümunəsini təmsil edən Java-da iki xüsusi açar sözdür. Java proqramçıları tez-tez bu sözləri qarışdırırlar və Java Core müsahibələrində tez-tez soruşulan xüsusi xüsusiyyətləri haqqında az məlumatlı olduqlarını göstərirlər. Məsələn, dərhal ağlınıza gələn bir neçə sual thisvə haqqındadır super, Java-da açar sözə fərqli məna təyin etmək mümkündürmü this? thisvə açar sözlər ilə superJava arasında fərq nədir . Bilməmək? Yaxşı, mən burada cavab vermirəm - bunu məqalənin sonunda tapa bilərsiniz. Java-da bu və super açar sözlər arasındakı fərq - 1Beləliklə, əvvəldə dediyim kimi, Java-dakı əsas fərq thisondan superibarətdir ki this, sinifin cari nümunəsi, superana sinifin cari nümunəsi təmsil edir. Dəyişənlərdən istifadənin bir nümunəsidir thissuper- yəqin ki, siz artıq bir-birinin konstruktorlarını çağırmaq nümunələrini görmüsünüz. zəncirdə konstruktorları çağırmaqla bu açar sözlərdən istifadə etməklə mümkündür thissuper. Sinif daxilində onun arqumentsiz konstruktorunu çağırmaq üçün istifadə olunur this(), super()arqumentsiz konstruktoru çağırmaq üçün istifadə olunur və ya eyni zamanda ana sinifin standart konstruktoru deyilir. Yeri gəlmişkən, bu yolla nəinki arqumentsiz konstruktoru, həm də ona uyğun parametrləri ötürməklə istənilən digər konstruktoru çağıra bilərsiniz. Tezliklə bu thisistifadə nümunəsini görəcəyik super. Həmçinin thisJava -da superonlar bir sinif nümunəsinin və onun anasının dəyişənlərinə daxil olmaq üçün istifadə olunur. Əslində, onlara supervə prefiksləri olmadan daxil olmaq olar this, ancaq cari blokda belə dəyişənlər digər dəyişənlərlə üst-üstə düşmədikdə, yəni. əgər onun tərkibində eyni adlara malik yerli dəyişənlər yoxdursa, əks halda siz adları prefiksli istifadə etməli olacaqsınız, lakin bunun əhəmiyyəti yoxdur, çünki bu formada onlar daha da oxunaqlıdır. thisBu yanaşmanın klassik nümunəsi onu nümunə dəyişəni ilə eyni ada malik parametr götürən konstruktor daxilində istifadə etməkdir . superDaha sonra məqalədə və arasında başqa hansı fərqlərin olduğunu öyrənəcəyik thisvə onların istifadəsinə dair bəzi nümunələrə baxacağıq.

Bu və super necə oxşardır

thisAçar sözlər və açar sözlər arasındakı fərqlərə baxmadan əvvəl superonların bəzi oxşarlıqlarına nəzər salaq:
  1. this, və hər ikisi superstatik olmayan dəyişənlərdir, ona görə də onlar statik kontekstdə istifadə edilə bilməz, yəni əsas metodda istifadə edilə bilməz. thisBu, "statik olmayan dəyişənə statik kontekstdən istinad edilə bilməz" kompilyasiya vaxtı xətası ilə nəticələnəcək . Əsas metodda açar sözü istifadə etsəniz, eyni şey baş verir super.

  2. Həm this, həm də superzəncirdəki digər konstruktorları çağırmaq üçün konstruktorların daxilində istifadə edilə bilər, məsələn, this() və super() müvafiq olaraq miras və ana siniflərin arqumentləri olmadan konstruktoru çağırır.
Aşağıdakı misalda biz ilk olaraq B sinifinin arqumentsiz konstruktorundan , tipli tək parametri qəbul edən eyni B sinfinin konstruktoruna zəngi ötürürük ki String, bu da öz növbəsində super("")supersinifdən bir arqumentli konstruktoru çağırır.
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();
    }

}
Nəticə: A sinfinin bir arqumentli konstruktoru B sinfinin bir arqumentli konstruktoru B sinfinin arqumentsiz konstruktoru
  1. Konstruktorun içərisində thissuperən başlanğıcda bütün digər ifadələrin üstündə görünməlidir, əks halda kompilyator səhv mesajı verəcəkdir. Buradan belə çıxır ki, bir konstruktor həm this(), həm də hər ikisini ehtiva edə bilməz super().

Super ilə bu arasındakı fərqlər

İndi biz açar sözlərdən necə istifadə edəcəyimizi bilirik superthisonların nə üçün lazım olduğunu başa düşürük. Ancaq bu açar sözlərdən istifadə etmək üçün qeyd etmədiyim başqa bir seçim var - Daxili siniflərdə, onların köməyi ilə Outer notation formasından istifadə edərək xarici sinfə müraciət etmək çox rahatdır. thishazırkı nümunəsi və Xarici üçün. super- valideyni üçün. Xarici sinfin adı ilə əvəz etməyi unutmayın. thisİndi və açar sözlər arasındakı əsas fərqləri qısaca sadalayaqsuper
  1. dəyişən thisistifadə olunduğu sinifin cari nümunəsinə istinad edir, halbuki o, superana sinifin cari nümunəsinə aiddir.

  2. Hər bir konstruktor, digər konstruktorlara açıq çağırışlar olmadıqda, super()öz ana sinifinin arqumentsiz konstruktorunu dolayısı ilə çağırır, lakin sizin hər zaman hər hansı digər konstruktoru ya ilə açıq şəkildə çağırmaq seçiminiz this()var super().
thisAçar sözlər və superJava arasındakı fərqlər və proqramlarda necə istifadə olunduğu haqqında deyilə biləcək bütün bunlar yəqin ki, budur . Gördüyümüz kimi, onların əsas məqsədi bir konstruktoru digərindən çağırmaq və cari sinifdə və onun ana sinifində elan edilmiş nümunə dəyişənlərinə istinad etməkdir. Unutmayın ki, bunlar tam olaraq adi dəyişənlər deyil və indi - birinci abzasda verdiyim sualımın cavabı. Xeyr, dəyişənə thisyeni dəyər təyin edilə bilməz, çünki o, yekun elan edilir. Siz bunu IDE-də etməyə cəhd edə bilərsiniz - siz "dəyişənə yeni dəyər təyin edə bilməzsiniz this- o, yekun elan edilib" kompilyasiya xətası alacaqsınız. Orijinal məqalə burada .
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION