logo

Super raktinis žodis Java

The super „Java“ raktinis žodis yra nuorodos kintamasis, naudojamas tiesiogiai pirminės klasės objektui nurodyti.

Kai kuriate poklasio egzempliorių, netiesiogiai sukuriamas pagrindinės klasės egzempliorius, kuris nurodomas super nuorodos kintamuoju.

Java super raktinio žodžio naudojimas

  1. super gali būti naudojamas tiesioginiam pirminės klasės egzemplioriaus kintamajam nurodyti.
  2. super gali būti naudojamas tiesioginiam pirminės klasės metodui iškviesti.
  3. super() gali būti naudojamas tiesioginiam pirminės klasės konstruktoriui iškviesti.
„Java Super“ raktinio žodžio naudojimas

1) super naudojamas tiesioginiam pirminės klasės egzemplioriaus kintamajam nurodyti.

Galime naudoti super raktinį žodį, kad pasiektume pirminės klasės duomenų narį arba lauką. Jis naudojamas, jei pirminė klasė ir antrinė klasė turi tuos pačius laukus.

lentynų šunys
 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(); }} 
Išbandykite dabar

Išvestis:

 black white 

Aukščiau pateiktame pavyzdyje „Animal“ ir „Dog“ abi klasės turi bendrą nuosavybės spalvą. Jei spausdinsime spalvos ypatybę, pagal numatytuosius nustatymus bus spausdinama dabartinės klasės spalva. Norėdami pasiekti pirminę nuosavybę, turime naudoti super raktinį žodį.

2) super gali būti naudojamas pirminės klasės metodui iškviesti

Super raktinis žodis taip pat gali būti naudojamas pirminės klasės metodui iškviesti. Jis turėtų būti naudojamas, jei poklasis turi tą patį metodą kaip pagrindinė klasė. Kitaip tariant, jis naudojamas, jei metodas yra nepaisomas.

 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(); }} 
Išbandykite dabar

Išvestis:

 eating... barking... 

Aukščiau pateiktame pavyzdyje Animal ir Dog abi klasės turi eat() metodą, jei iš Dog klasės iškviesime eat() metodą, pagal numatytuosius nustatymus ji iškvies Dog klasės eat() metodą, nes pirmenybė teikiama vietiniam.

Norėdami iškviesti pirminės klasės metodą, turime naudoti super raktinį žodį.

3) super naudojamas pirminės klasės konstruktoriui iškviesti.

Super raktinis žodis taip pat gali būti naudojamas pirminės klasės konstruktoriui iškviesti. Pažiūrėkime paprastą pavyzdį:

 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(); }} 
Išbandykite dabar

Išvestis:

 animal is created dog is created 

Pastaba: super() į kiekvieną klasės konstruktorių įtraukiamas automatiškai kompiliatoriaus, jei nėra super() arba this().

Java yra puiki

Kaip gerai žinome, numatytąjį konstruktorių kompiliatorius pateikia automatiškai, jei konstruktoriaus nėra. Tačiau jis taip pat prideda super() kaip pirmąjį teiginį.

Kitas super raktinio žodžio pavyzdys, kai super() kompiliatorius pateikia netiesiogiai.

 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(); }} 
Išbandykite dabar

Išvestis:

 animal is created dog is created 

puikus pavyzdys: tikras naudojimas

Pažiūrėkime, kaip realiai naudojamas super raktinis žodis. Čia Emp klasė paveldi Asmens klasę, todėl visos asmens savybės pagal numatytuosius nustatymus bus paveldėtos Emp. Norėdami inicijuoti visą nuosavybę, naudojame pirminės klasės konstruktorių iš antrinės klasės. Tokiu būdu mes pakartotinai naudojame pirminės klasės konstruktorių.

 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(); }} 
Išbandykite dabar

Išvestis:

 1 ankit 45000