The super Avainsana Javassa on viitemuuttuja, jota käytetään viittaamaan välittömään emoluokan objektiin.
Aina kun luot aliluokan ilmentymän, emoluokan ilmentymä luodaan implisiittisesti, johon viitataan superviitemuuttujalla.
Java super-avainsanan käyttö
- super voidaan käyttää viittaamaan välittömään emoluokan ilmentymämuuttujaan.
- super voidaan kutsua välittömään yläluokkaan.
- super()-funktiota voidaan käyttää välittömän yläluokan rakentajan kutsumiseen.
1) super käytetään viittaamaan välittömään emoluokan ilmentymämuuttujaan.
Voimme käyttää superavainsanaa päästäksemme pääluokan datajäseneen tai kenttiin. Sitä käytetään, jos yläluokalla ja alaluokalla on samat kentät.
unix-yläkomento
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(); }}Testaa nyt
Lähtö:
black white
Yllä olevassa esimerkissä Animal ja Dog molemmilla luokilla on yhteinen ominaisuusväri. Jos tulostamme väriominaisuuden, se tulostaa oletuksena nykyisen luokan värin. Päästäksemme ylätason omaisuuteen meidän on käytettävä super-avainsanaa.
2) super voidaan vedota vanhempi luokan menetelmää
Super-avainsanaa voidaan käyttää myös pääluokan menetelmän kutsumiseen. Sitä tulee käyttää, jos alaluokka sisältää saman menetelmän kuin emoluokka. Toisin sanoen sitä käytetään, jos menetelmä on ohitettu.
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(); }}Testaa nyt
Lähtö:
eating... barking...
Yllä olevassa esimerkissä Animal ja Dog molemmilla luokilla on eat()-metodi, jos kutsumme eat()-metodia Dog-luokasta, se kutsuu oletusarvoisesti Koira-luokan eat()-metodia, koska prioriteetti on paikalliselle.
Jotta voimme kutsua yläluokan menetelmää, meidän on käytettävä super-avainsanaa.
3) super käytetään kutsumaan vanhempi luokan rakentaja.
Super-avainsanaa voidaan käyttää myös pääluokan rakentajan kutsumiseen. Katsotaanpa yksinkertainen esimerkki:
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(); }}Testaa nyt
Lähtö:
animal is created dog is created
Huomautus: Kääntäjä lisää jokaiseen luokkakonstruktoriin automaattisesti super(), jos ei ole super() tai this().
Kuten tiedämme hyvin, oletuskonstruktorin kääntäjä tarjoaa automaattisesti, jos rakentajaa ei ole. Mutta se lisää myös super():n ensimmäiseksi lauseeksi.
Toinen esimerkki super-avainsanasta, jossa kääntäjä tarjoaa implisiittisesti super().
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(); }}Testaa nyt
Lähtö:
animal is created dog is created
super esimerkki: todellinen käyttö
Katsotaanpa super-avainsanan todellista käyttöä. Tässä Emp-luokka perii Person-luokan, joten kaikki Henkilön ominaisuudet peritään oletuksena Emp:lle. Kaikkien ominaisuuksien alustamiseksi käytämme aliluokan yläluokan konstruktoria. Tällä tavalla käytämme uudelleen pääluokan rakentajaa.
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(); }}Testaa nyt
Lähtö:
1 ankit 45000