this
we
super
Java-da degişlilikde synpyň we onuň superklassynyň häzirki ýagdaýyny görkezýän iki sany aýratyn açar söz. Java programmistleri köplenç bu sözleri bulaşdyrýarlar we Java Core söhbetdeşliklerinde köplenç soralýan aýratyn aýratynlyklary barada az habarly bolýarlar. Mysal üçin, derrew kelläme gelýän birnäçe sorag
this
we Java-da
super
açar söz üçin başga many bermek mümkinmi
this
?
this
we açar sözleriň we Java-da näme tapawut bar
super
. Bilmeýärin? Dogry, men bu ýerde jogap beremok - makalanyň soňunda tapyp bilersiňiz.
Şeýlelik bilen, başda aýdyşym ýaly, Java-yň arasyndaky esasy tapawut,
this
synpyň häzirki mysaly, ene-atanyň häzirki mysaly bolsa. Ine, üýtgeýjileri ulanmagyň bir mysaly we - eýýäm biri-birinden konstruktorlary çagyrýanlaryň mysallaryny gören bolsaňyz gerek. konstruktorlary zynjyrda çagyrmak, bu açar sözleri ulanmak arkaly mümkindir we . Bir synpyň içinde, argumentsiz konstruktor diýmek üçin, argumentsiz konstruktor ýa-da atlandyrylyşy ýaly ene-atanyň synpynyň deslapky konstruktory diýmek üçin ulanylýar . .Eri gelende aýtsak, bu usul bilen diňe bir argumentsiz konstruktor däl, eýsem degişli parametrleri geçip başga bir konstruktor hem çagyryp bilersiňiz. Bu ulanylyşyň mysalyny ýakyn wagtda göreris . Şeýle hem Java- da synp mysalynyň üýtgeýjilerine we onuň ene-atasyna girmek üçin ulanylýar. Aslynda, olara prefiksler bolmazdan girip bolýar , ýöne diňe häzirki blokda şeýle üýtgeýjiler beýleki üýtgeýjiler bilen gabat gelmeýän bolsa. şol bir at bilen ýerli üýtgeýjileri öz içine almasa, ýogsam atlary prefiks bilen ulanmaly bolarsyňyz, ýöne bu möhüm däl, sebäbi bu görnüşde hasam okalýar. Bu çemeleşmäniň nusgawy mysaly , mysal üýtgeýjisi bilen birmeňzeş at bilen parametr alýan konstruktoryň içinde ulanmakdyr . Soňra makalada başga tapawudyň bardygyny we olaryň ulanylyşynyň käbir mysallaryna serederis.
super
this
super
this
super
this
super
this()
super()
this
super
this
super
super
this
this
super
this
Bu we super nähili meňzeýär
this
Açar sözleriň arasyndaky tapawutlara seretmezden ozal
super
, käbir meňzeşliklerine seredeliň:
- Bularyň ikisi
this
hem super
statik däl üýtgeýjiler, şonuň üçin olary statiki kontekstde ulanyp bolmaýar, ýagny esasy usulda ulanyp bolmaýar. this
Bu, "statik däl üýtgeýjini statiki kontekstden görkezip bolmaz" jemleýji wagt ýalňyşlygyna getirer . Esasy usulda açar söz ulansaň, şol bir zat bolýar super
.
- Bularyň ikisi
this
hem super
zynjyrdaky beýleki konstruktorlary çagyrmak üçin içerki gurluşykçylarda ulanylyp bilner, mysal üçin this
() we super
() degişlilikde miras we ene-atalar synplary bolmazdan konstruktory çagyrmak.
Aşakdaky mysalda, ilki bilen B synpynyň argumentsiz konstruktoryndan B görnüşiniň ýekeje parametrini alýan konstruktoryna jaň edýäris
String
, bu bolsa öz gezeginde
super("")
superklasdan bir argumentli konstruktor diýýä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();
}
}
Netije: A synpyň bir argumentli konstruktory B synpyň bir argumentli konstruktory, B synpynyň argumentli konstruktory
- Konstruktoryň içinde
this
we super
beýleki sözlemlerden ýokarda görünmeli, başda düzüjisi säwlik habaryny berer. Ondan bir konstruktoryň ikisini hem saklap bilmejekdigi this()
we super()
.
Super bilen munuň arasyndaky tapawutlar
Indi açar sözleri nädip ulanmalydygyny
super
we
this
näme üçin zerurdygyny bilýäris. Theseöne bu açar sözleri ulanmazlyk üçin başga bir wariant bar - Içerki synplarda, olaryň kömegi bilen daşarky bellik formasyny ulanyp daşarky synpa ýüzlenmek gaty amatly.
this
häzirki ýagdaýy we Daşarky üçin.
super
- ene-atasy üçin. Daşarky synpyň ady bilen “Outer” -i çalyşmagy ýatdan çykarmaň.
this
Indi açar sözleriň arasyndaky esasy tapawutlary gysgaça sanap geçeliň
super
- üýtgeýji,
this
ulanylýan synpyň häzirki ýagdaýyna, super
ene synpyň häzirki ýagdaýyna degişlidir.
- Her bir konstruktor, beýleki konstruktorlara aç-açan jaň etmedik ýagdaýynda, öz synpynyň argumentsiz konstruktoryny aç-açan çagyrýar , ýöne elmydama başga bir konstruktory ýa-da
super()
aç-açan jaň edip bilersiňiz .this()
super()
this
Bu, açar sözleriň we
super
Java-daky tapawutlar we programmalarda ulanylyşy barada aýdylýanlaryň hemmesi bolsa gerek . Görşümiz ýaly, olaryň esasy maksady bir konstruktory beýlekisinden çagyrmak we häzirki synpda we onuň esasy synpynda yglan edilen üýtgeýänlere salgylanmak. Bularyň adaty üýtgeýjiler däldigini ýatdan çykarmaň, indi bolsa - birinji abzasda beren soragymyň jogaby. , Ok, üýtgeýjä
this
täze baha berilip bilinmez, sebäbi gutarnykly diýlip yglan edilýär. Muny IDE-de synap görüp bilersiňiz - "üýtgeýjä täze baha belläp bilmersiňiz
this
- gutarnykly diýlip yglan edilýär" düzme ýalňyşlygy alarsyňyz.
Asyl makala .
GO TO FULL VERSION