logo

Super klíčové slovo v Javě

The super klíčové slovo v Javě je referenční proměnná, která se používá k odkazování na objekt bezprostřední nadřazené třídy.

Kdykoli vytvoříte instanci podtřídy, implicitně se vytvoří instance nadřazené třídy, na kterou odkazuje super referenční proměnná.

Použití super klíčového slova Java

  1. super lze použít k odkazování na bezprostřední nadřazenou proměnnou instance třídy.
  2. super lze použít k vyvolání metody bezprostřední rodičovské třídy.
  3. super() lze použít k vyvolání konstruktoru bezprostřední rodičovské třídy.
Použití klíčového slova Java Super

1) super se používá k odkazování na bezprostřední nadřazenou proměnnou instance třídy.

Pro přístup k datovému členu nebo poli nadřazené třídy můžeme použít klíčové slovo super. Používá se, pokud rodičovská třída a podřízená třída mají stejná pole.

typ data na stroji
 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(); }} 
Otestujte to hned

Výstup:

 black white 

Ve výše uvedeném příkladu mají obě třídy Zvíře a Pes společnou barvu vlastnosti. Pokud tiskneme vlastnost color, standardně vytiskne barvu aktuální třídy. Pro přístup k rodičovské vlastnosti musíme použít klíčové slovo super.

2) super lze použít k vyvolání metody rodičovské třídy

Klíčové slovo super lze také použít k vyvolání metody rodičovské třídy. Mělo by se použít, pokud podtřída obsahuje stejnou metodu jako nadřazená třída. Jinými slovy, používá se, pokud je metoda přepsána.

 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(); }} 
Otestujte to hned

Výstup:

 eating... barking... 

Ve výše uvedeném příkladu Zvíře a Pes mají obě třídy metodu eat(), pokud zavoláme metodu eat() z třídy Dog, bude to implicitně volat metodu eat() třídy Dog, protože priorita je dána local.

K volání metody rodičovské třídy musíme použít klíčové slovo super.

3) super se používá k vyvolání konstruktoru rodičovské třídy.

Klíčové slovo super lze také použít k vyvolání konstruktoru nadřazené třídy. Podívejme se na jednoduchý pří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(); }} 
Otestujte to hned

Výstup:

 animal is created dog is created 

Poznámka: super() je přidáno do každého konstruktoru třídy automaticky kompilátorem, pokud neexistuje super() nebo this().

Java je skvělá

Jak dobře víme, výchozí konstruktor poskytuje kompilátor automaticky, pokud konstruktor neexistuje. Ale také přidá super() jako první příkaz.

Další příklad klíčového slova super, kde super() poskytuje kompilátor implicitně.

 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(); }} 
Otestujte to hned

Výstup:

 animal is created dog is created 

super příklad: reálné použití

Pojďme se podívat na skutečné použití super klíčového slova. Zde třída Emp dědí třídu Person, takže všechny vlastnosti osoby budou ve výchozím nastavení zděděny na Emp. K inicializaci celé vlastnosti používáme konstruktor rodičovské třídy z podřízené třídy. Tímto způsobem znovu používáme konstruktor rodičovské třídy.

 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(); }} 
Otestujte to hned

Výstup:

 1 ankit 45000