Java super søkeord (med eksempler)

I denne veiledningen vil vi lære om supernøkkelordet i Java ved hjelp av eksempler.

Den superordet i Java brukes i underklasser for å få tilgang super medlemmer (attributter, konstruktører og metoder).

Før du lærer om supersøkeordet, må du sørge for å vite om Java-arv.

Bruk av super søkeord

  1. Å kalle metoder for superklassen som overstyres i underklassen.
  2. For å få tilgang til attributter (felt) til superklassen hvis både superklassen og underklassen har attributter med samme navn.
  3. For å eksplisitt kalle superklasse no-arg (standard) eller parameterisert konstruktør fra underklassekonstruktøren.

La oss forstå hver av disse bruksområdene.

1. Få tilgang til overstyrte metoder i superklassen

Hvis metoder med samme navn er definert i både superklasse og underklasse, overstyrer metoden i underklassen metoden i superklassen. Dette kalles 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(); ) ) 

Produksjon

 jeg er en hund 

I dette eksemplet, ved å lage et objekt hund1 av hundeklassen, kan vi kalle metoden sin printMessage () som deretter utfører display()uttalelsen.

Siden display()er definert i begge klassene, overstyrer metoden for underklasse Dog metoden til superklassen Animal. Derfor display()kalles underklassen.

Hva om superklassens overstyrte metode må kalles?

Vi bruker super.display()hvis den overstyrte metoden display()for superklasse Animal må kalles.

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(); ) ) 

Produksjon

 Jeg er en hund jeg er et dyr 

Her, hvordan programmet ovenfor fungerer.

2. Få tilgang til attributtene til superklassen

Superklassen og underklassen kan ha attributter med samme navn. Vi bruker supernøkkelordet for å få tilgang til attributtet til superklassen.

Eksempel 3: Få tilgang til superklassattributtet

 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(); ) ) 

Utgang :

 Jeg er et pattedyr. Jeg er et dyr 

I dette eksemplet har vi definert samme forekomstfeltype i både superklassen Animal og underklassen Dog.

Vi opprettet deretter en objekthund1 av hundeklassen. Deretter printType()kalles metoden ved hjelp av dette objektet.

Inne i printType()funksjonen,

  • type refererer til attributtet til underklassen Dog.
  • super.type refererer til attributtet til superklassen Animal.

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

3. Bruk av super () for å få tilgang til superklassekonstruktør

Som vi vet, når et objekt i en klasse opprettes, blir standardkonstruktøren automatisk kalt.

For å eksplisitt kalle superklassekonstruktøren fra underklassekonstruktøren, bruker vi super(). Det er en spesiell form for supernøkkelordet.

super() kan bare brukes inne i underklassekonstruktøren og må være den første uttalelsen.

Eksempel 4: Bruk av 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(); ) ) 

Produksjon

 Jeg er et dyr jeg er en hund 

Her, når et objekt hund1 av Hundeklasse opprettes, kaller det automatisk standard- eller ikke-arg-konstruktøren for den klassen.

Inside the subclass constructor, the super() statement calls the constructor of the superclass and executes the statements inside it. Hence, we get the output I am an animal.

The flow of the program then returns back to the subclass constructor and executes the remaining statements. Thus, I am a dog will be printed.

However, using super() is not compulsory. Even if super() is not used in the subclass constructor, the compiler implicitly calls the default constructor of the superclass.

So, why use redundant code if the compiler automatically invokes super()?

It is required if the parameterized constructor (a constructor that takes arguments) of the superclass has to be called from the subclass constructor.

Den parameteriserte super()må alltid være den første setningen i kroppen til konstruktøren av underklassen, ellers får vi en kompileringsfeil.

Eksempel 5: Call Parameterized Constructor Using 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(); ) ) 

Produksjon

 Type: Dyr Jeg er en hund 

Kompilatoren kan automatisk ringe no-arg-konstruktøren. Imidlertid kan den ikke kalle parameteriserte konstruktører.

Hvis en parameterisert konstruktør må kalles, må vi eksplisitt definere den i underklassekonstruktøren.

Merk at vi i eksemplet ovenfor kalte den parameteriserte konstruktøren eksplisitt super("Animal"). Kompilatoren kaller ikke standardkonstruktøren til superklassen i dette tilfellet.

Interessante artikler...