logo

Forskjellen mellom dette og super i Java

De 'dette' og ' super' nøkkelord er reserverte ord som brukes i en annen kontekst. Utover dette gir Java også dette() og super() konstruktører som brukes i konstruktørsammenheng. I denne delen vil vi diskutere forskjeller mellom dette og supersøkeordet og denne() og super() konstruktør, i Java.

super nøkkelord og super() konstruktør

super nøkkelord

Et reservert nøkkelord som brukes til å kalle grunnklassemetoden eller variabelen er kjent som en super nøkkelord. Vi kan ikke bruke super nøkkelord som et identifikator . Supernøkkelordet brukes ikke bare til å referere til basisklasseforekomsten, men også statiske medlemmer.

super() Konstruktør

De super() brukes hovedsakelig for å påkalle basisklassemedlemsfunksjoner og konstruktører.

La oss ta et eksempel på begge super nøkkelord og super() for å forstå hvordan de fungerer.

SuperExample1.java

 // 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'); } } 

Produksjon:

dette vs super i Java

I main()-metoden har vi laget en uttalelse nytt SuperExample1() . Det kaller konstruktøren av Supereksempel1 klasse.

Inne i konstruktøren har vi uttalt oss super() som kaller konstruktøren til overordnet klasse, dvs. Katt. I konstruktøren har vi kommet med tre utsagn:

  1. Initialiser farge med verdi 'Brun'.
  2. Skriv ut overordnet klassedatamedlem.
  3. Skriv ut gjeldende klassedatamedlem.

Når den andre setningen kjøres, hopper flyten av programmet til Animal-klassen for å få tilgang til verdien av datamedlemmene. Etter å ha tilgang til den, kommer flyten tilbake til Katt klassekonstruktør og skriver den ut. Etter det kjører den siste setningen og skriver ut verdien av variablene til gjeldende klasse.

Etter utførelse av den siste uttalelsen av Katt klasse, kommer flyten tilbake til konstruktøren av klasse Supereksempel1 og utfører de resterende setningene.

Etter å ha fullført utførelsen av SuperExample1() , kommer flyten tilbake til main()-metoden og utfører de resterende setningene.

Merk: For å bruke super(), må vi sørge for at den skal være den første setningen i konstruktøren til en klasse. Vi kan bruke den til å referere bare til den overordnede klassekonstruktøren.

dette nøkkelordet og denne()-konstruktøren

dette søkeordet

Det er et reservert nøkkelord i Java som brukes til å referere til det gjeldende klasseobjektet. Det er en referansevariabel som metoden kalles gjennom. Andre bruksområder for dette søkeordet er:

  • Vi kan bruke den til å referere gjeldende klasseforekomstvariabel.
  • Vi kan bruke den til å påkalle den gjeldende klassemetoden (implisitt).
  • Vi kan sende det som et argument i metode- og konstruktørkallene.
  • Vi kan også bruke den til å returnere gjeldende klasseforekomst fra metoden.

denne() Konstruktør

Konstruktøren brukes til å kalle en konstruktør fra den andre av samme klasse. La oss ta et eksempel på begge dette nøkkelord og dette() for å forstå hvordan de fungerer.

ThisExample1.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'); } } 

Produksjon:

dette vs super i Java

Forskjellen mellom dette og super søkeord

Følgende tabell beskriver nøkkelforskjellen mellom dette og super:

dette super
Den gjeldende forekomsten av klassen er representert av dette nøkkelordet. Den gjeldende forekomsten av den overordnede klassen er representert av supernøkkelordet.
For å kalle standardkonstruktøren til gjeldende klasse, kan vi bruke dette nøkkelordet. For å kalle standardkonstruktøren til overordnet klasse, kan vi bruke supernøkkelordet.
Det kan refereres til fra en statisk kontekst. Det betyr at det kan påkalles fra den statiske konteksten. Det kan ikke refereres til fra en statisk kontekst. Det betyr at det ikke kan påberopes fra en statisk kontekst.
Vi kan bruke den til kun å få tilgang til gjeldende klassedatamedlemmer og medlemsfunksjoner. Vi kan bruke den til å få tilgang til datamedlemmene og medlemsfunksjonene til den overordnede klassen.

Forskjellen mellom denne() og super() konstruktøren

dette() super()
this()-konstruktøren refererer til det gjeldende klasseobjektet. Super()-konstruktøren refererer til umiddelbar overordnet klasseobjekt.
Den brukes til å påkalle gjeldende klassemetode. Den brukes til å påkalle overordnede klassemetoder.
Den kan brukes hvor som helst i den parameteriserte konstruktøren. Det er alltid den første linjen i barneklassekonstruktøren.
Den brukes til å påkalle en superklasseversjon av en overstyrt metode. Den brukes til å påkalle en superklasseversjon av en overstyrt metode.