logo

Diferența dintre aceasta și super în Java

The 'acest' si ' super' cuvintele cheie sunt cuvinte rezervate care sunt folosite într-un context diferit. Pe lângă aceasta, Java oferă și acest() și super() constructori care sunt utilizați în contextul constructorului. În această secțiune, vom discuta despre diferențele dintre acest cuvânt și super-cheie și constructorul this() și super(), în Java.

super cuvânt cheie și constructor super().

super cuvânt cheie

Un cuvânt cheie rezervat folosit pentru a apela metoda sau variabila clasei de bază este cunoscut ca a super cuvânt cheie. Nu putem folosi super cuvânt cheie ca un identificator . Cuvântul cheie super nu este folosit doar pentru a se referi la instanța clasei de bază, ci și la membrii statici.

super() Constructor

The super() este utilizat în principal pentru invocarea funcțiilor și constructorilor membre ale clasei de bază.

Să luăm un exemplu pentru ambele super cuvânt cheie și super() pentru a înțelege cum funcționează.

SuperExample1.java

javabil
 // import required classes and packages package javaTpoint.MicrosoftJava; // create Animal class which is base class of Animal class Animal{ // data member of Animal class String color = 'white'; } // create child class of Animal class Cat extends Animal{ //default constructor Cat() { // data members of the Cat class String color = 'Brown'; System.out.println('The cat is of color '+super.color); // calling parent class data member System.out.println('The cat is of color '+color); } } // create child class for Car class SuperExample1 extendsCat { // default constructor SuperExample1() { // calling base class constructor super(); System.out.println('The eyes of the cat is blue.'); } // main() method start publicstaticvoid main(String[] args) { // call default constructor of the SuperExample1 new SuperExample1(); System.out.println('Inside Main'); } } 

Ieșire:

asta vs super în Java

În metoda main(), am făcut o declarație nou SuperExample1() . Îl cheamă pe constructorul SuperExample1 clasă.

În interiorul constructorului, am făcut declarație super() care apelează constructorul clasei părinte, adică Pisică. În constructor, am făcut trei afirmații:

  1. Inițializați culoarea cu valoare 'Maro'.
  2. Tipăriți membrii datelor clasei părinte.
  3. Tipăriți membrul curent al clasei.

Când se execută a doua instrucțiune, fluxul programului trece la clasa Animal pentru a accesa valoarea membrilor săi de date. După accesarea acestuia, fluxul revine la Pisică constructorul clasei și îl imprimă. După aceea, ultima instrucțiune execută și tipărește valoarea variabilelor clasei curente.

După executarea ultimei declarații a Pisică clasa, fluxul revine la constructorul clasei SuperExample1 și execută instrucțiunile rămase.

După finalizarea execuției SuperExample1() , fluxul revine la metoda main() și execută instrucțiunile rămase.

Notă: Pentru a folosi super(), trebuie să ne asigurăm că ar trebui să fie prima instrucțiune din constructorul unei clase. Îl putem folosi pentru a face referire numai la constructorul clasei părinte.

acest cuvânt cheie și acest constructor ().

acest cuvânt cheie

Este un cuvânt cheie rezervat în Java care este folosit pentru a se referi la obiectul clasei curente. Este o variabilă de referință prin care este apelată metoda. Alte utilizări ale acestui cuvânt cheie sunt:

cuvânt cheie static în java
  • O putem folosi pentru a face referire la variabila de instanță a clasei curente.
  • O putem folosi pentru a invoca metoda clasei curente (implicit).
  • Îl putem transmite ca argument în apelurile de metodă și constructor.
  • De asemenea, îl putem folosi pentru a returna instanța de clasă curentă din metodă.

this() Constructor

Constructorul este folosit pentru a apela un constructor din celălalt din aceeași clasă. Să luăm un exemplu pentru ambele acest cuvânt cheie și acest() pentru a înțelege cum funcționează.

AcestExemplu1.java

 // import required classes and packages package javaTpoint.MicrosoftJava; // create ThisExample1 class to understand the working of this() and this class ThisExample1 { // initialize instance and static variable int x = 5; staticinty = 10; // default constructor of class ThisExample1 ThisExample1() { // invoking current class constructor this(5); System.out.println('We are insie of the default constructor.'); System.out.println('The value of x = '+x); } ThisExample1(int x) { this.x = x; // override value of the current class instance variable System.out.println('We are inside of the parameterized constructor.'); System.out.println('The value of y = '+y); } publicstaticvoid main(String[] args) { // invoking constructor of the current class new ThisExample1(); System.out.println('Inside Main'); } } 

Ieșire:

asta vs super în Java

Diferența dintre acest cuvânt și super-cheie

Următorul tabel descrie diferența cheie dintre aceasta și super:

acest super
Instanța curentă a clasei este reprezentată de acest cuvânt cheie. Instanța curentă a clasei părinte este reprezentată de cuvântul cheie super.
Pentru a apela constructorul implicit al clasei curente, putem folosi acest cuvânt cheie. Pentru a apela constructorul implicit al clasei părinte, putem folosi cuvântul cheie super.
Se poate face referire la el dintr-un context static. Înseamnă că poate fi invocat din contextul static. Nu se poate face referire la el dintr-un context static. Înseamnă că nu poate fi invocat dintr-un context static.
Îl putem folosi pentru a accesa doar membrii actuali de date ale clasei și funcțiile membre. Îl putem folosi pentru a accesa membrii de date și funcțiile membre ale clasei părinte.

Diferența dintre acest() și super() Constructor

acest() super()
Constructorul this() se referă la obiectul clasei curente. Constructorul super() se referă la obiectul clasei părinte imediate.
Este folosit pentru invocarea metodei clasei curente. Este folosit pentru invocarea metodelor clasei părinte.
Poate fi folosit oriunde în constructorul parametrizat. Este întotdeauna prima linie din constructorul clasei copil.
Este folosit pentru a invoca o versiune super-clasă a unei metode suprascrise. Este folosit pentru a invoca o versiune super-clasă a unei metode suprascrise.