this
və
super
mü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
this
və haqqındadır
super
, Java-da açar sözə fərqli məna təyin etmək mümkündürmü
this
?
this
və açar sözlər ilə
super
Java arasında fərq nədir . Bilməmək? Yaxşı, mən burada cavab vermirəm - bunu məqalənin sonunda tapa bilərsiniz.
Beləliklə, əvvəldə dediyim kimi, Java-dakı əsas fərq
this
ondan
super
ibarətdir ki
this
, sinifin cari nümunəsi,
super
ana sinifin cari nümunəsi təmsil edir. Dəyişənlərdən istifadənin bir nümunəsidir
this
və
super
- 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
this
və
super
. 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
this
istifadə nümunəsini görəcəyik
super
. Həmçinin
this
Java -da
super
onlar bir sinif nümunəsinin və onun anasının dəyişənlərinə daxil olmaq üçün istifadə olunur. Əslində, onlara
super
və 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.
this
Bu 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 .
super
Daha sonra məqalədə və arasında başqa hansı fərqlərin olduğunu öyrənəcəyik
this
və onların istifadəsinə dair bəzi nümunələrə baxacağıq.
Bu və super necə oxşardır
this
Açar sözlər və açar sözlər arasındakı fərqlərə baxmadan əvvəl
super
onların bəzi oxşarlıqlarına nəzər salaq:
this
, və hər ikisi super
statik olmayan dəyişənlərdir, ona görə də onlar statik kontekstdə istifadə edilə bilməz, yəni əsas metodda istifadə edilə bilməz. this
Bu, "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
.
- Həm
this
, həm də super
zə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("");
System.out.println("Конструктор без аргументов класса B");
}
B(String args){
super("");
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
- Konstruktorun içərisində
this
və super
ə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
super
və
this
onları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.
this
hazı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 sadalayaq
super
- dəyişən
this
istifadə olunduğu sinifin cari nümunəsinə istinad edir, halbuki o, super
ana sinifin cari nümunəsinə aiddir.
- 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()
.
this
Açar sözlər və
super
Java 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ə
this
yeni 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 .
GO TO FULL VERSION