Java super Keyword (med exempel)

I den här handledningen lär vi oss supernyckelordet i Java med hjälp av exempel.

Det supersökord i Java används i underklasser för att få tillgång super medlemmar (attribut, konstruktorer och metoder).

Innan vi lär oss om supernyckelordet, se till att veta om Java-arv.

Användning av super nyckelord

  1. Att kalla metoder för superklassen som åsidosätts i underklassen.
  2. För att komma åt attribut (fält) för superklassen om både superklass och underklass har attribut med samma namn.
  3. Att uttryckligen anropa superklass no-arg (standard) eller parametrerad konstruktör från underklasskonstruktören.

Låt oss förstå var och en av dessa användningsområden.

1. Få tillgång till överklassade metoder i superklassen

Om metoder med samma namn definieras i både superklass och underklass, åsidosätter metoden i underklassen metoden i superklassen. Detta kallas metodöverstyrning.

Exempel 1: Metod åsidosättande

 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

 jag är en hund 

I det här exemplet kan vi, genom att skapa ett objekt dog1 i Dog-klass, kalla metoden printMessage () som sedan utför display()uttalandet.

Eftersom det display()definieras i båda klasserna åsidosätter metoden för underklass Dog metoden för superklass Animal. Därför display()kallas underklassen.

Vad händer om superklassens åsidosatta metod måste kallas?

Vi använder super.display()om den åsidosatta metoden display()för superklass Animal måste anropas.

Exempel 2: super till 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

 Jag är en hund Jag är ett djur 

Här, hur ovanstående program fungerar.

2. Åtkomstattribut för superklassen

Superklassen och underklassen kan ha attribut med samma namn. Vi använder supernyckelordet för att komma åt attributet för superklassen.

Exempel 3: Åtkomst till superklassattribut

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

Utgång :

 Jag är ett däggdjur jag är ett djur 

I det här exemplet har vi definierat samma instansfältstyp i både superklassen Animal och underklassen Dog.

Vi skapade sedan ett objekt hund1 i hundklassen. Sedan printType()kallas metoden med det här objektet.

Inuti printType()funktionen,

  • typ hänvisar till attributet för underklassen Hund.
  • super.type hänvisar till attributet för superklassen Animal.

Därför är System.out.println("I am a " + type);jag ett däggdjur. Och, System.out.println("I am an " + super.type);tryck jag är ett djur.

3. Användning av super () för att komma åt superklasskonstruktör

Som vi vet, när ett objekt i en klass skapas kallas dess standardkonstruktör automatiskt.

För att uttryckligen anropa superklasskonstruktören från underklasskonstruktören använder vi super(). Det är en speciell form av supernyckelordet.

super() kan endast användas i underklasskonstruktören och måste vara det första uttalandet.

Exempel 4: Användning 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(); ) ) 

Produktion

 Jag är ett djur Jag är en hund 

Här, när ett objekt dog1 i Dog-klass skapas, kallas det automatiskt standard- eller no-arg-konstruktören för 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.

Det parametrerade super()måste alltid vara det första påståendet i underklassens konstruktör, annars får vi ett kompileringsfel.

Exempel 5: Samtalsparameteriserad konstruktör med 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

 Typ: Djur Jag är en hund 

Kompilatorn kan automatiskt ringa konstruktören utan arg. Det kan dock inte anropas parametrerade konstruktörer.

Om en parametrerad konstruktör måste anropas måste vi uttryckligen definiera den i underklasskonstruktören.

Observera att i exemplet ovan kallade vi uttryckligen den parametrerade konstruktorn super("Animal"). Kompilatorn anropar inte superklassens standardkonstruktör i det här fallet.

Intressanta artiklar...