logo

Forskellen mellem dette og super i Java

Det 'det her' og ' super' nøgleord er reserverede ord, der bruges i en anden sammenhæng. Udover dette giver Java også det her() og super() konstruktører, der bruges i konstruktørkonteksten. I dette afsnit vil vi diskutere forskelle mellem dette og super søgeord og denne() og super() konstruktør, i Java.

super nøgleord og super() konstruktør

super søgeord

Et reserveret nøgleord, der bruges til at kalde basisklassens metode eller variabel, er kendt som en super søgeord. Vi kan ikke bruge super søgeord som et identifikator . Supernøgleordet bruges ikke kun til at henvise til basisklasseforekomsten, men også til statiske medlemmer.

super() Konstruktør

Det super() bruges hovedsageligt til at kalde basisklassemedlemsfunktioner og konstruktører.

Lad os tage et eksempel på begge super søgeord og super() at 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'); } } 

Produktion:

dette vs super i Java

I main()-metoden har vi lavet en erklæring nyt SuperExample1() . Det kalder konstruktøren af Supereksempel 1 klasse.

Inde i konstruktøren har vi lavet en erklæring super() som kalder konstruktøren af ​​sin overordnede klasse, dvs. Kat. I konstruktøren har vi lavet tre udsagn:

  1. Initialiser farve med værdi 'Brun'.
  2. Udskriv overordnet klassedatamedlem.
  3. Udskriv det aktuelle klassedatamedlem.

Når den anden sætning udføres, springer programmets flow til Animal-klassen for at få adgang til værdien af ​​dets datamedlemmer. Efter at have fået adgang til det, kommer flowet tilbage til Kat klassekonstruktør og udskriver den. Derefter udfører den sidste sætning og udskriver værdien af ​​variablerne i den aktuelle klasse.

Efter udførelse af den sidste erklæring af Kat klasse, kommer flowet tilbage til klassekonstruktøren Supereksempel 1 og udfører de resterende udsagn.

Efter at have afsluttet udførelsen af SuperExample1() , kommer flowet tilbage til main()-metoden og udfører de resterende sætninger.

Bemærk: For at bruge super() skal vi sørge for, at det skal være den første sætning i konstruktøren af ​​en klasse. Vi kan bruge det til kun at henvise til den overordnede klassekonstruktør.

dette søgeord og denne() konstruktør

dette søgeord

Det er et reserveret nøgleord i Java, der bruges til at henvise til det aktuelle klasseobjekt. Det er en referencevariabel, som metoden kaldes igennem. Andre anvendelser af dette søgeord er:

  • Vi kan bruge den til at henvise til den aktuelle klasseforekomstvariabel.
  • Vi kan bruge den til at påkalde den nuværende klassemetode (implicit).
  • Vi kan sende det som et argument i metode- og konstruktørkaldene.
  • Vi kan også bruge den til at returnere den aktuelle klasseinstans fra metoden.

denne() Konstruktør

Konstruktøren bruges til at kalde en konstruktør fra den anden af ​​samme klasse. Lad os tage et eksempel på begge dele det her søgeord og det her() at forstå, hvordan de fungerer.

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

Produktion:

dette vs super i Java

Forskellen mellem dette og super søgeord

Følgende tabel beskriver den vigtigste forskel mellem dette og super:

det her super
Den aktuelle forekomst af klassen er repræsenteret af dette nøgleord. Den aktuelle forekomst af den overordnede klasse er repræsenteret af supernøgleordet.
For at kalde standardkonstruktøren for den aktuelle klasse kan vi bruge dette nøgleord. For at kalde standardkonstruktøren af ​​den overordnede klasse kan vi bruge super nøgleordet.
Det kan henvises til fra en statisk kontekst. Det betyder, at det kan påberåbes fra den statiske kontekst. Det kan ikke henvises til fra en statisk kontekst. Det betyder, at det ikke kan påberåbes fra en statisk kontekst.
Vi kan bruge det til kun at få adgang til de aktuelle klassedatamedlemmer og medlemsfunktioner. Vi kan bruge det til at få adgang til datamedlemmerne og medlemsfunktionerne i den overordnede klasse.

Forskellen mellem denne() og super() konstruktør

det her() super()
this()-konstruktøren refererer til det aktuelle klasseobjekt. Super()-konstruktøren henviser til det umiddelbare overordnede klasseobjekt.
Den bruges til at kalde den aktuelle klassemetode. Det bruges til at påkalde overordnede klassemetoder.
Den kan bruges overalt i den parametriserede konstruktør. Det er altid den første linje i børneklassekonstruktøren.
Det bruges til at påberåbe en superklasseversion af en tilsidesat metode. Det bruges til at påberåbe en superklasseversion af en tilsidesat metode.