The Super Kľúčové slovo v jazyku Java je referenčná premenná, ktorá sa používa na odkazovanie na objekt bezprostrednej nadradenej triedy.
Kedykoľvek vytvoríte inštanciu podtriedy, implicitne sa vytvorí inštancia nadradenej triedy, na ktorú odkazuje nadradená referenčná premenná.
Použitie super kľúčového slova Java
- super možno použiť na odkazovanie premennej inštancie bezprostrednej nadradenej triedy.
- super možno použiť na vyvolanie metódy bezprostrednej rodičovskej triedy.
- super() možno použiť na vyvolanie konštruktora bezprostrednej rodičovskej triedy.
1) super sa používa na označenie premennej inštancie bezprostrednej nadradenej triedy.
Na prístup k dátovému členu alebo poli nadradenej triedy môžeme použiť kľúčové slovo super. Používa sa, ak nadradená trieda a podradená trieda majú rovnaké polia.
typ dátumu strojopisu
class Animal{ String color='white'; } class Dog extends Animal{ String color='black'; void printColor(){ System.out.println(color);//prints color of Dog class System.out.println(super.color);//prints color of Animal class } } class TestSuper1{ public static void main(String args[]){ Dog d=new Dog(); d.printColor(); }}Vyskúšajte to
Výkon:
black white
Vo vyššie uvedenom príklade majú obe triedy Zviera a Pes spoločnú farbu vlastnosti. Ak vytlačíme vlastnosť farby, štandardne vytlačí farbu aktuálnej triedy. Na prístup k rodičovskej vlastnosti musíme použiť kľúčové slovo super.
2) super možno použiť na vyvolanie metódy rodičovskej triedy
Kľúčové slovo super možno použiť aj na vyvolanie metódy rodičovskej triedy. Mal by sa použiť, ak podtrieda obsahuje rovnakú metódu ako rodičovská trieda. Inými slovami, používa sa, ak je metóda prepísaná.
class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void eat(){System.out.println('eating bread...');} void bark(){System.out.println('barking...');} void work(){ super.eat(); bark(); } } class TestSuper2{ public static void main(String args[]){ Dog d=new Dog(); d.work(); }}Vyskúšajte to
Výkon:
eating... barking...
Vo vyššie uvedenom príklade Zviera a Pes majú obe triedy metódu eat(), ak zavoláme metódu eat() z triedy Pes, štandardne zavolá metódu eat() triedy Pes, pretože prioritu má lokálna.
Na zavolanie metódy rodičovskej triedy musíme použiť kľúčové slovo super.
3) super sa používa na vyvolanie konštruktora rodičovskej triedy.
Kľúčové slovo super možno použiť aj na vyvolanie konštruktora nadradenej triedy. Pozrime sa na jednoduchý príklad:
class Animal{ Animal(){System.out.println('animal is created');} } class Dog extends Animal{ Dog(){ super(); System.out.println('dog is created'); } } class TestSuper3{ public static void main(String args[]){ Dog d=new Dog(); }}Vyskúšajte to
Výkon:
animal is created dog is created
Poznámka: super() sa pridáva do každého konštruktora triedy automaticky kompilátorom, ak neexistuje super() alebo toto().
Ako dobre vieme, predvolený konštruktor poskytuje kompilátor automaticky, ak neexistuje žiadny konštruktor. Ale tiež pridá super() ako prvý príkaz.
Ďalší príklad kľúčového slova super, kde super() poskytuje kompilátor implicitne.
class Animal{ Animal(){System.out.println('animal is created');} } class Dog extends Animal{ Dog(){ System.out.println('dog is created'); } } class TestSuper4{ public static void main(String args[]){ Dog d=new Dog(); }}Vyskúšajte to
Výkon:
animal is created dog is created
super príklad: reálne využitie
Pozrime sa na skutočné využitie super kľúčového slova. Tu trieda Emp zdedí triedu Person, takže všetky vlastnosti osoby budú predvolene zdedené na Emp. Na inicializáciu celej vlastnosti používame konštruktor rodičovskej triedy z podradenej triedy. Týmto spôsobom znova používame konštruktor rodičovskej triedy.
class Person{ int id; String name; Person(int id,String name){ this.id=id; this.name=name; } } class Emp extends Person{ float salary; Emp(int id,String name,float salary){ super(id,name);//reusing parent constructor this.salary=salary; } void display(){System.out.println(id+' '+name+' '+salary);} } class TestSuper5{ public static void main(String[] args){ Emp e1=new Emp(1,'ankit',45000f); e1.display(); }}Vyskúšajte to
Výkon:
1 ankit 45000