Diferența dintre cuvintele cheie acest lucru și super-java

Diferența dintre cuvintele cheie acest lucru și super Java

iar acest super-- acestea sunt două cuvinte cheie speciale în Java, care reprezintă, respectiv, instanța curentă a clasei și superclasa. Java-programatori confunda de multe ori cuvintele și pentru a găsi conștientizarea slabă a proprietăților lor speciale, care sunt de multe ori au cerut un interviu pentru Java CORE. De exemplu, câteva întrebări, de la ceea ce vine imediat în minte despre acest lucru și super. Este posibil să se atribuie o valoare diferită a acestui cuvânt cheie în Java? și care este diferența dintre cuvintele cheie acest lucru și super Java. Nu știi? Ei bine, aici nu-mi dau răspunsul - o puteți găsi la sfârșitul anului. Deci, așa cum am spus la început, principala diferență dintre aceasta și super-în Java este faptul că aceasta reprezintă instanța curentă a clasei, în timp ce super - actuala instanță a clasei părinte. Aici este un exemplu de utilizare a variabilelor, iar acest super-- probabil că ați văzut deja exemple de designeri numesc unul celuilalt, așa-numitele constructor solicită lanțul, este posibil prin utilizarea de cuvinte cheie acest lucru și super-. In interiorul clasei pentru a apela constructorul fără argumente folosirea acestui (), în timp ce super () este folosit pentru a apela constructorul fără argumente, sau cum este numit, constructorul implicit al clasei părinte. De altfel, în acest fel, poate induce nu numai un constructor fără argumente, precum și orice și toate celelalte constructor, dându-i parametri adecvați. În curând vom vedea un exemplu de această utilizare a acestui super-și. Mai mult acest lucru și super-în Java folosit pentru a desemna o variabilă instanță și mamă. De fapt, ele pot fi accesate fără super prefixe și acest lucru. dar numai în cazul în care blocul curent astfel de variabile nu se suprapun alte variabile, de exemplu, în cazul în care nu există nici o variabilă locală cu același nume, în caz contrar, utilizați nume cu prefixe trebuie să fie sigur, dar nu contează, pentru că în acest fel, ele sunt chiar mai ușor de citit. Un exemplu clasic al acestei abordări este de a utiliza acest constructor in interiorul care ia un parametru cu același nume ca și cea a variabilei instanță. Mai departe în articol, vom afla ce altceva există diferențe între super și acest lucru. si uita-te la câteva exemple.

Înainte de a analiza diferențele dintre acest cuvânt cheie și super. să ne uităm la unele similitudini:

1) Și acest lucru. și super - este variabile non-statice nu pot fi utilizate, respectiv, într-un context static, ceea ce înseamnă că ele nu pot fi utilizate în principal metoda. Acest lucru va avea ca rezultat o eroare în timpul compilării „pe variabila non-statica acest lucru nu se poate face referire la un context static.“ Același lucru se întâmplă în cazul în care metoda principală de a utiliza super cuvinte cheie.

2) Și acest lucru. și pot fi utilizate în cadrul super-constructor pentru a apela alt lanț de constructori, ex. acest lucru) și super () constructor (se numește fără argumente clase de patrimoniu și mamă, respectiv.

In exemplul de mai jos, vom trece mai întâi apelul constructorului de clasa B, fără argumente pentru constructorul din aceeași clasă B, având un singur parametru de tipul String, de la care, la rândul său, prin intermediul super-( „“) este apelată cu un constructor argument al superclasei.


3) În interiorul acestui super-și proiectantul trebuie să stea mai presus de toate celelalte expresii, de la bun început, în caz contrar compilatorul va emite un mesaj de eroare. Rezultă că un singur constructor nu poate fi simultan și acest lucru (), și super ().

Diferențele în acest lucru și super-
Acum știm cum să utilizați cuvinte cheie și super acest lucru și să înțeleagă ceea ce au nevoie. Dar există o altă opțiune de a utiliza aceste cuvinte cheie, pe care nu am spus - într-o clasă internă, în cazul în care ajutorul lor este foarte convenabil să se facă referire la clasa exterioară folosind notatia Outer.this, de exemplu, sa actuală și Outer.super - pentru părinții săi. Nu uitați să Outer în loc să înlocuiască numele clasei exterioare. Și acum să ne enumera pe scurt principalele diferențe dintre cuvintele cheie acest lucru și super

1) această variabilă se referă la instanța curentă a clasei în care este folosit, în timp ce super - la instanța curentă a clasei părinte.

2) Fiecare proiectant în absența unor apeluri explicite către alți constructori de apeluri, implicit folosind super () constructor fără argumente, clasa părinte, în acest caz, aveți întotdeauna posibilitatea de a apela în mod explicit orice constructor fie cu acest lucru (), sau super-().

Poate că acest lucru este tot ce se poate spune despre diferența dintre cuvintele cheie și acest super-în Java și modul în care acestea sunt utilizate în cadrul programelor. După cum am văzut, scopul lor principal - de a provoca un constructor de la altul și se referă la variabilele exemplu declarate în clasa curentă și clasa părinte. Nu uitați că acest lucru nu este variabile normale, iar acum - răspunsul la întrebarea mea am întrebat în primul paragraf. Nu, această variabilă nu poate fi atribuită o valoare nouă, deoarece este declarată ca fiind finale. Puteți încerca să-l facă în IDE - obține o eroare de compilare „nu se poate atribui o nouă valoare acestui - este declarată ca finală».

1) această variabilă se referă la instanța curentă a clasei în care este folosit, în timp ce super - la instanța curentă a clasei părinte. Aș dori să clarifice pe super. Se spune că se referă la o instanță a clasei părinte. adică, dacă luăm un exemplu din text. Creați un singur proiect:

Acum, în cazul în care codul de clasa B, ne întâlnim referiri la super (nu în constructor, dar undeva în alte metode, de exemplu) - se referă la objA se întâmplă?
și dacă vom avea:

ceea ce va invoca acum super-?

Multumesc pentru raspuns, chiar daca se pare foarte noob)

Ceva nu mai văzut această problemă înainte, abia acum a observat :-)
În acest caz, super cuvânt cheie, utilizat în codul de clasă B se va referi la obiectul clasei părinte, care este parte a obiectului B. La urma urmei, atunci când creați un obiect de orice clasă, orice clasă - sunt obiecte în primul tuturor claselor sale mamă, și numai la sfârșitul - obiectul clasei.
Ie Obiectul este de fapt clasa de 2, pentru a fi exact - 3 obiecte: obiect de clasa Object, clasa obiectului și obiectul de clasa B.
În exemplul dumneavoastră, super-nu va invoca nici un obiect objA, orice objA1 obiect.

Buna ziua! Nu înțeleg destul de expresia „3) ... Rezultă că un constructor nu poate fi, în același timp, iar acest lucru (), și Super ()» Ce despre level15.lesson02.task04 sarcină, în care există un constructor (exemplu de cod) Multumesc in avans . -)
public class static AgathaChristieBook extinde Book
Numele public String;
AgathaChristieBook publice (String nume)
super-( «Agatha Christie»);
this.name = nume;
>

Aici, acest lucru este utilizat pentru câmpul, iar noi vorbim despre un alt apel în acest) constructor (, și anume în acest fel este imposibil:

articole similare