Java super nøgleord (med eksempler)

I denne vejledning lærer vi om super nøgleordet i Java ved hjælp af eksempler.

Den supernøgleord i Java bruges i underklasser at få adgang til superklasse medlemmer (attributter, konstruktører og metoder).

Før vi lærer om supernøgleordet, skal du sørge for at vide om Java-arv.

Anvendelse af super nøgleord

  1. At kalde metoder til superklassen, der er tilsidesat i underklassen.
  2. For at få adgang til attributter (felter) for superklassen, hvis både superklasse og underklasse har attributter med samme navn.
  3. For eksplicit at kalde superklasse no-arg (standard) eller parametreret konstruktør fra underklassekonstruktøren.

Lad os forstå hver af disse anvendelser.

1. Få adgang til superklassens overstyrede metoder

Hvis metoder med samme navn er defineret i både superklasse og underklasse, tilsidesætter metoden i underklassen metoden i superklassen. Dette kaldes metodeoverstyring.

Eksempel 1: Metodeoverstyring

 class Animal ( // overridden method public void display()( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // overriding method @Override public void display()( System.out.println("I am a dog"); ) public void printMessage()( display(); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printMessage(); ) ) 

Produktion

 Jeg er en hund 

I dette eksempel kan vi ved at lave et objekt hund1 af hundeklassen kalde dets metode printMessage (), som derefter udfører display()udsagnet.

Da display()er defineret i begge klasser, tilsidesætter metoden med underklasse Hund metoden til superklasse Animal. Derfor display()kaldes underklassen.

Hvad hvis superklassens tilsidesatte metode skal kaldes?

Vi bruger, super.display()hvis den tilsidesatte metode display()til superklasse Animal skal kaldes.

Eksempel 2: super til Call Superclass Method

 class Animal ( // overridden method public void display()( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // overriding method @Override public void display()( System.out.println("I am a dog"); ) public void printMessage()( // this calls overriding method display(); // this calls overridden method super.display(); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printMessage(); ) ) 

Produktion

 Jeg er en hund, jeg er et dyr 

Her, hvordan ovenstående program fungerer.

2. Adgang til attributter for superklassen

Superklassen og underklassen kan have attributter med samme navn. Vi bruger supernøgleordet for at få adgang til superklassens attribut.

Eksempel 3: Få adgang til superklasseattribut

 class Animal ( protected String; ) class Dog extends Animal ( public String; public void printType() ( System.out.println("I am a " + type); System.out.println("I am an " + super.type); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printType(); ) ) 

Output :

 Jeg er et pattedyr, jeg er et dyr 

I dette eksempel har vi defineret den samme forekomstfeltype i både superklassen Animal og underklassen Dog.

Derefter oprettede vi et objekt hund1 af hundeklassen. Derefter printType()kaldes metoden ved hjælp af dette objekt.

Inde i printType()funktionen,

  • type refererer til attributten til underklassen Dog.
  • super.type henviser til attributten til superklassen Animal.

Derfor er System.out.println("I am a " + type);jeg et pattedyr. Og, System.out.println("I am an " + super.type);udskriver jeg et dyr.

3. Brug af super () for at få adgang til superclass-konstruktør

Som vi ved, når et objekt fra en klasse oprettes, kaldes dets standardkonstruktør automatisk.

For at udtrykkeligt kalde superklassekonstruktøren fra underklassekonstruktøren bruger vi super(). Det er en særlig form for supernøgleordet.

super() kan kun bruges inde i underklassekonstruktøren og skal være den første sætning.

Eksempel 4: Brug af super ()

 class Animal ( // default or no-arg constructor of class Animal Animal() ( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // default or no-arg constructor of class Dog Dog() ( // calling default constructor of the superclass super(); System.out.println("I am a dog"); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); ) ) 

Produktion

 Jeg er et dyr, jeg er en hund 

Her, når et objekt hund1 i Hundeklasse oprettes, kalder det automatisk standard- eller ikke-arg-konstruktøren for den klasse.

Inde i underklassekonstruktøren super()kalder erklæringen konstruktøren for superklassen og udfører udsagnene inde i den. Derfor får vi den produktion, jeg er et dyr.

Programmets strømning vender derefter tilbage til underklassekonstruktøren og udfører de resterende udsagn. Således er jeg en hund vil blive trykt.

Brug super()er dog ikke obligatorisk. Selvom super()det ikke bruges i underklassekonstruktøren, kalder compileren implicit standardkonstruktøren for superklassen.

Så hvorfor bruge overflødig kode, hvis compileren automatisk påberåber sig super ()?

Det kræves, hvis den parametriserede konstruktør (en konstruktør, der tager argumenter) i superklassen skal kaldes fra underklassekonstruktøren.

Den parametriserede super()skal altid være den første sætning i kroppen af ​​konstruktionen af ​​underklassen, ellers får vi en kompileringsfejl.

Eksempel 5: Opkaldsparameteriseret konstruktør ved hjælp af super ()

 class Animal ( // default or no-arg constructor Animal() ( System.out.println("I am an animal"); ) // parameterized constructor Animal(String type) ( System.out.println("Type: "+type); ) ) class Dog extends Animal ( // default constructor Dog() ( // calling parameterized constructor of the superclass super("Animal"); System.out.println("I am a dog"); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); ) ) 

Produktion

 Type: Dyr Jeg er en hund 

Compileren kan automatisk ringe til konstruktøren uden arg. Det kan dog ikke kalde parametriserede konstruktører.

Hvis en parameteriseret konstruktør skal kaldes, skal vi eksplicit definere den i underklassekonstruktøren.

Bemærk, at vi i ovenstående eksempel udtrykkeligt kaldte den parametriserede konstruktør super("Animal"). Compileren kalder ikke superklassens standardkonstruktør i dette tilfælde.

Interessante artikler...