Super kľúčové slovo Java (s príkladmi)

V tomto tutoriále sa pomocou príkladov dozvieme o super kľúčovom slove v Jave.

superKľúčové slovo v Jave je používaný v podtriedach pre prístup k supertrieda členov (atribúty, konštruktérmi a metód).

Predtým, ako sa dozvieme o superkľúčovom slove, nezabudnite vedieť o dedičnosti Java.

Využitie super kľúčového slova

  1. Volanie metód nadtriedy, ktorá je prepísaná v podtriede.
  2. Prístup k atribútom (poliam) nadtriedy, ak má nadtrieda aj podtrieda atribúty s rovnakým názvom.
  3. Výslovné volanie nadtriedy no-arg (predvolené) alebo parametrizovaného konštruktora z konštruktora podtriedy.

Poďme pochopiť každé z týchto použití.

1. Prístup k prepísaným metódam nadtriedy

Ak sú metódy s rovnakým názvom definované v nadtriede aj podtriede, metóda v podtriede prepíše metódu v nadtriede. Toto sa nazýva prepísanie metódy.

Príklad 1: Prepísanie metódy

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

Výkon

 Ja som pes 

V tomto príklade vytvorením objektu dog1 triedy Dog môžeme nazvať jeho metódu printMessage (), ktorá potom vykoná display()príkaz.

Pretože display()je definovaná v oboch triedach, metóda podtriedy Pes má prednosť pred metódou nadtriedy Zviera. Preto display()sa nazýva podtrieda.

Čo ak sa musí zavolať prepísaná metóda nadtriedy?

Používame, super.display()ak je display()potrebné zavolať prepísanú metódu nadtriedy Animal.

Príklad 2: Metóda super volania nadtriedy

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

Výkon

 Som pes som zviera 

Tu funguje vyššie uvedený program.

2. Prístup k atribútom nadtriedy

Nadtrieda a podtrieda môžu mať atribúty s rovnakým názvom. superKľúčové slovo používame na prístup k atribútu nadtriedy.

Príklad 3: Prístup k atribútu nadtriedy

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

Výstup :

 Som cicavec som zviera 

V tomto príklade sme definovali rovnaký typ poľa inštancie v nadtriede Zviera aj v podtriede Pes.

Potom sme vytvorili objekt dog1 triedy Dog. Potom sa printType()metóda volá pomocou tohto objektu.

Vo vnútri printType()funkcie

  • type odkazuje na atribút podtriedy Dog.
  • super.typ odkazuje na atribút nadtriedy Zviera.

Preto System.out.println("I am a " + type);odtlačky som cicavec. A System.out.println("I am an " + super.type);odtlačky som zviera.

3. Použitie super () na prístup ku konštruktoru nadtriedy

Ako vieme, pri vytváraní objektu triedy sa automaticky volá jeho predvolený konštruktor.

Na výslovné volanie konštruktora nadtriedy z konštruktora podtriedy používame super(). Je to špeciálna forma superkľúčového slova.

super() je možné použiť iba vo vnútri konštruktora podtriedy a musí to byť prvý príkaz.

Príklad 4: Použitie znaku 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(); ) ) 

Výkon

 Som zviera, som pes 

Tu, keď sa vytvorí objekt dog1 triedy Dog, automaticky zavolá predvolený alebo no-arg konštruktor tejto triedy.

Vo vnútri konštruktora podtriedy super()príkaz zavolá konštruktor nadtriedy a vykoná v nej príkazy. Preto dostaneme výstup, že som zviera.

Tok programu sa potom vráti späť do konštruktora podtriedy a vykoná zostávajúce príkazy. Takto som pes bude vytlačený.

Používanie super()však nie je povinné. Aj keď super()sa nepoužíva v konštruktore podtriedy, kompilátor implicitne volá predvolený konštruktor nadtriedy.

Prečo teda používať nadbytočný kód, ak kompilátor automaticky vyvolá super ()?

Vyžaduje sa, ak sa parametrizovaný konštruktor (konštruktor, ktorý prijíma argumenty) nadtriedy musí volať z konštruktora podtriedy.

Parametrizovaný super()musí byť vždy prvý príkaz v tele konštruktora podtriedy, inak dostaneme chybu kompilácie.

Príklad 5: Zavolajte parametrizovaného konštruktéra pomocou 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(); ) ) 

Výkon

 Typ: Zviera Som pes 

Kompilátor môže automaticky zavolať konštruktor no-arg. Nemôže však volať parametrizované konštruktory.

Ak je potrebné zavolať parametrizovaný konštruktor, musíme ho explicitne definovať v konštruktore podtriedy.

Všimnite si, že vo vyššie uvedenom príklade sme explicitne nazvali parametrizovaný konštruktor super("Animal"). Kompilátor v tomto prípade nenazýva predvolený konštruktor nadtriedy.

Zaujímavé články...