A szuper A kulcsszó a Java nyelvben egy referenciaváltozó, amely az azonnali szülő osztály objektumainak hivatkozására szolgál.
Amikor létrehozza az alosztály példányát, a szülőosztály egy példánya implicit módon jön létre, amelyre a szuperhivatkozási változó hivatkozik.
Java szuper kulcsszó használata
- A super használható az azonnali szülő osztály példányváltozójára való hivatkozásra.
- super használható az azonnali szülő osztály metódusának meghívására.
- A super() használható az azonnali szülő osztály konstruktorának meghívására.
1) super az azonnali szülő osztály példányváltozójára utal.
Szuper kulcsszóval elérhetjük a szülőosztály adattagját vagy mezőjét. Akkor használatos, ha a szülőosztály és a gyermekosztály azonos mezőkkel rendelkezik.
string összehasonlítás java-ban
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(); }}Tesztelje most
Kimenet:
black white
A fenti példában az Állat és a Kutya osztálynak közös tulajdonságszíne van. Ha színtulajdonságot nyomtatunk, akkor alapértelmezés szerint az aktuális osztály színét nyomtatja ki. A szülőtulajdon eléréséhez szuper kulcsszót kell használnunk.
2) super használható a szülő osztály metódusának meghívására
A szuper kulcsszó a szülő osztály metódusának meghívására is használható. Akkor kell használni, ha az alosztály ugyanazt a metódust tartalmazza, mint a szülőosztály. Más szóval, akkor használatos, ha a módszer felül van írva.
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(); }}Tesztelje most
Kimenet:
eating... barking...
A fenti példában az Animal és Dog mindkét osztálynak van eat() metódusa, ha a Dog osztályból meghívjuk az eat() metódust, akkor alapértelmezés szerint a Dog osztály eat() metódusát fogja meghívni, mivel a local prioritást élvez.
A szülő osztály metódusának meghívásához szuper kulcsszót kell használnunk.
3) a super a szülő osztály konstruktorának meghívására szolgál.
A szuper kulcsszó a szülő osztály konstruktorának meghívására is használható. Lássunk egy egyszerű példát:
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(); }}Tesztelje most
Kimenet:
animal is created dog is created
Megjegyzés: a fordító automatikusan hozzáadja a super()-t minden osztálykonstruktorhoz, ha nincs super() vagy this().
Jól tudjuk, hogy az alapértelmezett konstruktort a fordító automatikusan biztosítja, ha nincs konstruktor. De az első utasításként hozzáadja a super()-t is.
Egy másik példa a szuper kulcsszóra, ahol a super()-t a fordító implicit módon biztosítja.
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(); }}Tesztelje most
Kimenet:
animal is created dog is created
szuper példa: valós használat
Lássuk a szuper kulcsszó valódi használatát. Itt az Emp osztály a Person osztályt örökli, így a Person összes tulajdonságát alapértelmezés szerint az Emp örökli. Az összes tulajdonság inicializálásához szülőosztály-konstruktort használunk a gyermekosztályból. Ily módon újra felhasználjuk a szülő osztály konstruktorát.
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(); }}Tesztelje most
Kimenet:
1 ankit 45000