The super cuvântul cheie în Java este o variabilă de referință care este folosită pentru a trimite obiectul clasei părinte imediate.
Ori de câte ori creați o instanță a subclasei, este creată implicit o instanță a clasei părinte care este referită prin variabila super referință.
Utilizarea super-cheie Java
- super poate fi folosit pentru a face referire la variabila de instanță a clasei părinte imediate.
- super poate fi folosit pentru a invoca metoda clasei părinte imediate.
- super() poate fi folosit pentru a invoca constructorul imediat al clasei părinte.
1) super este folosit pentru a se referi la variabila de instanță a clasei părinte imediate.
Putem folosi un cuvânt cheie super pentru a accesa membrul de date sau câmpul clasei părinte. Este folosit dacă clasa părinte și clasa copil au aceleași câmpuri.
kat timpf greutate
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(); }}Testează-l acum
Ieșire:
black white
În exemplul de mai sus, Animal și Dog ambele clase au o culoare de proprietate comună. Dacă imprimăm proprietatea color, aceasta va imprima implicit culoarea clasei curente. Pentru a accesa proprietatea părinte, trebuie să folosim un cuvânt cheie super.
2) super poate fi folosit pentru a invoca metoda clasei părinte
Cuvântul cheie super poate fi folosit și pentru a invoca metoda clasei părinte. Ar trebui folosit dacă subclasa conține aceeași metodă ca și clasa părinte. Cu alte cuvinte, este folosit dacă metoda este suprascrisă.
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(); }}Testează-l acum
Ieșire:
eating... barking...
În exemplul de mai sus, Animal și Dog, ambele clase au metoda eat() dacă apelăm metoda eat() din clasa Dog, aceasta va apela metoda eat() din clasa Dog în mod implicit, deoarece prioritate este dată local.
Pentru a apela metoda clasei părinte, trebuie să folosim un cuvânt cheie super.
3) super este folosit pentru a invoca constructorul clasei părinte.
Cuvântul cheie super poate fi folosit și pentru a invoca constructorul clasei părinte. Să vedem un exemplu simplu:
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(); }}Testează-l acum
Ieșire:
animal is created dog is created
Notă: super() este adăugat automat în fiecare constructor de clasă de către compilator dacă nu există super() sau this().
După cum știm bine, constructorul implicit este furnizat automat de compilator dacă nu există niciun constructor. Dar, adaugă și super() ca primă declarație.
Un alt exemplu de cuvânt cheie super unde super() este furnizat implicit de compilator.
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(); }}Testează-l acum
Ieșire:
animal is created dog is created
super exemplu: utilizare reală
Să vedem utilizarea reală a super-cheie. Aici, clasa Emp moștenește clasa Person, astfel încât toate proprietățile lui Person vor fi moștenite implicit la Emp. Pentru a inițializa toată proprietatea, folosim constructorul clasei părinte din clasa copil. În acest fel, reutilizam constructorul clasei părinte.
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(); }}Testează-l acum
Ieșire:
1 ankit 45000