JavaRush /Java Blog /Random-TK /Java-da bu we super açar sözleriň arasyndaky tapawut
grishin
Dereje
Харьков

Java-da bu we super açar sözleriň arasyndaky tapawut

Toparda çap edildi
thiswe superJava-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 thiswe Java-da superaçar söz üçin başga many bermek mümkinmi this? thiswe 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. Java bilen bu we super açar sözleriň arasyndaky tapawut - 1Şeýlelik bilen, başda aýdyşym ýaly, Java-yň arasyndaky esasy tapawut, thissynpyň 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. superthissuperthissuperthissuperthis()super()thissuperthissupersuperthisthissuperthis

Bu we super nähili meňzeýär

thisAçar sözleriň arasyndaky tapawutlara seretmezden ozal super, käbir meňzeşliklerine seredeliň:
  1. Bularyň ikisi thishem superstatik däl üýtgeýjiler, şonuň üçin olary statiki kontekstde ulanyp bolmaýar, ýagny esasy usulda ulanyp bolmaýar. thisBu, "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.

  2. Bularyň ikisi thishem superzynjyrdaky 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(""); // вызов конструктора с одним аргументом класса 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();
    }

}
Netije: A synpyň bir argumentli konstruktory B synpyň bir argumentli konstruktory, B synpynyň argumentli konstruktory
  1. Konstruktoryň içinde thiswe superbeý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 superwe thisnä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. thishäzirki ýagdaýy we Daşarky üçin. super- ene-atasy üçin. Daşarky synpyň ady bilen “Outer” -i çalyşmagy ýatdan çykarmaň. thisIndi açar sözleriň arasyndaky esasy tapawutlary gysgaça sanap geçeliňsuper
  1. üýtgeýji, thisulanylýan synpyň häzirki ýagdaýyna, superene synpyň häzirki ýagdaýyna degişlidir.

  2. 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()
thisBu, açar sözleriň we superJava-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ä thistä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 .
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION