this
va
super
Java tilidagi ikkita maxsus kalit so'zlar mos ravishda sinf va uning yuqori sinfining joriy nusxasini ifodalaydi. Java dasturchilari ko'pincha bu so'zlarni chalkashtirib yuborishadi va ularning Java Core intervyularida tez-tez so'raladigan maxsus xususiyatlari haqida kam ma'lumotga ega. Misol uchun, darhol xayolga keladigan bir nechta savollar
this
va haqida bo'ladi, Java tilida
super
kalit so'zga boshqa ma'no berish mumkinmi ? va kalit so'zlar va Java
this
o'rtasidagi farq nima . Bilmayman? Xo'sh, men bu erda javob bermayman - uni maqolaning oxirida topish mumkin. Shunday qilib, boshida aytib o'tganimdek, Java-dan asosiy farq shundaki , sinfning joriy nusxasi, ota-klassning joriy nusxasi esa ifodalaydi. Mana, o'zgaruvchilardan foydalanishning bir misoli va - ehtimol siz birining konstruktorlarini boshqasidan chaqirish misollarini ko'rgansiz, deb atalmish. konstruktorlarni zanjirda chaqirish, bu kalit so'zlardan foydalanish orqali mumkin va . Sinf ichida argumentsiz konstruktorni chaqirish uchun ishlatiladi , u argumentsiz konstruktorni chaqirish uchun ishlatiladi yoki u ham deyiladi, ota-klassning standart konstruktori. Aytgancha, shu tarzda siz faqat argumentlarsiz konstruktorni emas, balki unga mos parametrlarni o'tkazish orqali boshqa istalgan konstruktorni ham chaqirishingiz mumkin. Tez orada bu foydalanish misolini ko'ramiz . Shuningdek, Java -da ular sinf namunasi va uning ota-onasining o'zgaruvchilariga kirish uchun ishlatiladi. Aslida, ularga va prefikslarisiz kirish mumkin , lekin joriy blokda bunday o'zgaruvchilar boshqa o'zgaruvchilar bilan bir-biriga mos kelmasa, ya'ni. agar unda bir xil nomli mahalliy o'zgaruvchilar bo'lmasa, aks holda siz prefiksli nomlardan foydalanishingiz kerak bo'ladi, lekin bu muhim emas, chunki bu shaklda ular yanada o'qilishi mumkin. Ushbu yondashuvning klassik namunasi uni misol o'zgaruvchisi bilan bir xil nomga ega parametrni qabul qiluvchi konstruktor ichida ishlatishdir . Keyinchalik maqolada va o'rtasida yana qanday farqlar borligini bilib olamiz va ulardan foydalanishning ba'zi misollarini ko'rib chiqamiz.
this
super
this
super
this
super
this
super
this
super
this()
super()
this
super
this
super
super
this
this
super
this
Bu va super qanday o'xshash
this
Kalit so'zlar va kalit so'zlar o'rtasidagi farqlarni ko'rib chiqishdan oldin
super
, ularning ba'zi o'xshashliklarini ko'rib chiqaylik:
this
, va ikkalasi super
ham statik bo'lmagan o'zgaruvchilardir, shuning uchun ularni statik kontekstda ishlatib bo'lmaydi, ya'ni ularni asosiy usulda ishlatib bo'lmaydi. Bu kompilyatsiya vaqtida xatolikka olib keladi "statik bo'lmagan o'zgaruvchiga this
statik kontekstdan havola qilish mumkin emas". Agar kalit so'zni asosiy usulda ishlatsangiz, xuddi shu narsa sodir bo'ladi super
.
- Har ikkisi
this
va super
konstruktorlar ichida zanjirdagi boshqa konstruktorlarni chaqirish uchun ishlatilishi mumkin, masalan, this
() va super
() mos ravishda meros va ota-sinflar argumentlarisiz konstruktorni chaqirish.
Quyidagi misolda biz birinchi navbatda B sinfidagi argumentsiz konstruktordan bitta turdagi parametrni qabul qiluvchi bir xil B sinfidagi konstruktorga qo'ng'iroqni o'tkazamiz
String
, bu esa o'z navbatida
super("")
supersinfdan bitta argumentli konstruktorni chaqiradi.
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();
}
}
Natija: A sinfining bitta argumentli konstruktori B sinfining bitta argumentli konstruktori B sinfining argumentsiz konstruktori
- Konstruktor ichida
this
va super
boshida barcha boshqa iboralar ustida paydo bo'lishi kerak, aks holda kompilyator xato xabarini chiqaradi. Bundan kelib chiqadiki, bitta konstruktor ikkala this()
va ni o'z ichiga olmaydi super()
.
Super va bu o'rtasidagi farqlar
Endi biz kalit so'zlardan qanday foydalanishni bilamiz
super
va
this
ular nima uchun kerakligini tushunamiz. Ammo men eslatib o'tmagan ushbu kalit so'zlardan foydalanishning yana bir varianti bor - ichki sinflarda, bu erda ularning yordami bilan Outer notation shaklidan foydalangan holda tashqi sinfga murojaat qilish juda qulay.
this
uning joriy misoli va tashqi uchun.
super
- ota-onasi uchun. Outerni tashqi sinf nomi bilan almashtirishni unutmang.
this
Endi kalit so'zlar va kalit so'zlar o'rtasidagi asosiy farqlarni qisqacha sanab o'tamiz
super
- o'zgaruvchi o'zi
this
ishlatilayotgan sinfning joriy namunasiga ishora qiladi, holbuki u super
ota-sinfning joriy namunasiga ishora qiladi.
- Har bir konstruktor, boshqa konstruktorlarga aniq qo'ng'iroqlar bo'lmasa,
super()
o'z ota-klassining argumentsiz konstruktorini bilvosita chaqiradi, lekin sizda har doim boshqa har qanday konstruktorni this()
yoki bilan aniq qo'ng'iroq qilish imkoniyati mavjud super()
.
this
Bu, ehtimol, kalit so'zlar va
super
Java o'rtasidagi farqlar va ularning dasturlarda qanday ishlatilishi haqida aytilishi mumkin bo'lgan narsadir . Ko'rib turganimizdek, ularning asosiy maqsadi bir konstruktorni boshqasidan chaqirish va joriy sinf va uning ota-klassida e'lon qilingan misol o'zgaruvchilariga murojaat qilishdir. Shuni unutmangki, bu oddiy o'zgaruvchilar emas va endi - birinchi xatboshida so'ragan savolimga javob. Yo'q, o'zgaruvchiga
this
yangi qiymat berish mumkin emas, chunki u yakuniy deb e'lon qilingan. Buni IDE-da bajarishga urinib ko'rishingiz mumkin - siz kompilyatsiya xatosini olasiz "siz o'zgaruvchiga yangi qiymat bera olmaysiz
this
- u yakuniy deb e'lon qilingan."
Asl maqola bu yerda .
GO TO FULL VERSION