De 'detta' och den ' super' nyckelord är reserverade ord som används i ett annat sammanhang. Förutom detta tillhandahåller Java också detta() och super() konstruktorer som används i konstruktorsammanhang. I det här avsnittet kommer vi att diskutera skillnader mellan detta och supersökord och this() och super() konstruktor, i Java.
super nyckelord och super() konstruktor
super nyckelord
Ett reserverat nyckelord som används för att anropa basklassmetoden eller variabeln kallas a super nyckelord. Vi kan inte använda super nyckelord som ett identifierare . Nyckelordet super används inte bara för att referera till basklassens instans utan även statiska medlemmar.
super() konstruktör
De super() används huvudsakligen för att anropa basklassmedlemsfunktioner och konstruktorer.
Låt oss ta ett exempel på båda super nyckelord och super() att förstå hur de fungerar.
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:
I main()-metoden har vi gjort ett uttalande new SuperExample1() . Det kallar konstruktören av Superexempel1 klass.
Inuti konstruktören har vi gjort ett uttalande super() som anropar konstruktorn för sin överordnade klass, dvs. Katt. I konstruktorn har vi gjort tre påståenden:
- Initiera färg med värde 'Brun'.
- Skriv ut överordnad klassdatamedlem.
- Skriv ut aktuell klassdatamedlem.
När den andra satsen körs, hoppar programmets flöde till Animal class för att komma åt värdet på dess datamedlemmar. Efter att ha kommit åt det kommer flödet tillbaka till Katt klasskonstruktör och skriver ut den. Därefter exekverar den sista satsen och skriver ut värdet på variablerna i den aktuella klassen.
Efter utförandet av det sista uttalandet av Katt klass kommer flödet tillbaka till klasskonstruktören Superexempel1 och utför de återstående uttalandena.
Efter att ha slutfört utförandet av SuperExample1() , kommer flödet tillbaka till main()-metoden och kör de återstående satserna.
Obs: För att kunna använda super() måste vi se till att det ska vara den första satsen i konstruktorn för en klass. Vi kan använda den för att endast referera till den överordnade klasskonstruktorn.
detta nyckelord och this() konstruktor
detta nyckelord
Det är ett reserverat nyckelord i Java som används för att referera till det aktuella klassobjektet. Det är en referensvariabel genom vilken metoden anropas. Andra användningsområden för detta sökord är:
- Vi kan använda den för att referera till aktuell klassinstansvariabel.
- Vi kan använda den för att anropa den aktuella klassmetoden (implicit).
- Vi kan skicka det som ett argument i metod- och konstruktoranropen.
- Vi kan också använda den för att returnera den aktuella klassinstansen från metoden.
this() konstruktör
Konstruktorn används för att anropa en konstruktor från den andra i samma klass. Låt oss ta ett exempel på båda detta nyckelord och detta() att förstå hur de fungerar.
ThisExample1.java
uppsåt uppsåt
// 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:
Skillnaden mellan detta och supersökord
Följande tabell beskriver nyckelskillnaden mellan detta och super:
detta | super |
---|---|
Den aktuella instansen av klassen representeras av detta nyckelord. | Den aktuella instansen av den överordnade klassen representeras av supernyckelordet. |
För att anropa standardkonstruktorn för den aktuella klassen kan vi använda detta nyckelord. | För att anropa standardkonstruktorn för den överordnade klassen kan vi använda nyckelordet super. |
Det kan hänvisas till från ett statiskt sammanhang. Det betyder att det kan åberopas från det statiska sammanhanget. | Det kan inte refereras från ett statiskt sammanhang. Det betyder att det inte kan åberopas från ett statiskt sammanhang. |
Vi kan använda den för att bara komma åt de aktuella klassdatamedlemmarna och medlemsfunktionerna. | Vi kan använda den för att komma åt datamedlemmarna och medlemsfunktionerna i den överordnade klassen. |
Skillnaden mellan denna() och super() konstruktör
detta() | super() |
---|---|
This()-konstruktorn refererar till det aktuella klassobjektet. | Super()-konstruktorn refererar till det omedelbara överordnade klassobjektet. |
Den används för att anropa den aktuella klassmetoden. | Den används för att anropa överordnade klassmetoder. |
Den kan användas var som helst i den parametriserade konstruktorn. | Det är alltid första raden i barnklasskonstruktorn. |
Den används för att anropa en superklassversion av en åsidosatt metod. | Den används för att anropa en superklassversion av en åsidosatt metod. |