Java szuper kulcsszó (példákkal)

Ebben az oktatóanyagban példák segítségével megismerhetjük a Java szuper kulcsszavát.

A superJava kulcsszót az alosztályokban használják a szuperosztály tagjai (attribútumok, konstruktorok és módszerek) elérésére.

Mielőtt megtudnánk a superkulcsszót, feltétlenül ismerje meg a Java öröklődését.

A szuper kulcsszó használata

  1. Az alosztályban felülírt szuperosztály metódusainak meghívása.
  2. A szuperosztály attribútumaihoz (mezõihez) való hozzáférés, ha mind a szuperosztály, mind az alosztály azonos névvel rendelkeznek.
  3. A szuperosztályú no-arg (alapértelmezett) vagy paraméterezett konstruktor kifejezett megnevezése az alosztály konstruktorából.

Értsük meg ezeket a felhasználásokat.

1. Hozzáférés a szuperosztály felülbírált módszereihez

Ha az azonos nevű módszereket mind a szuperosztályban, mind az alosztályban definiálják, az alosztályban szereplő módszer felülírja a szuperkategória módszerét. Ezt nevezzük metódus felülbírálásnak.

1. példa: A módszer felülbírálása

 class Animal ( // overridden method public void display()( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // overriding method @Override public void display()( System.out.println("I am a dog"); ) public void printMessage()( display(); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printMessage(); ) ) 

Kimenet

 egy kutya vagyok 

Ebben a példában a Dog osztály objektum dog1 létrehozásával a metódust printMessage () -nek hívhatjuk, amely aztán végrehajtja az display()utasítást.

Mivel display()mindkét osztályban meg van határozva, a Dog alosztály módszere felülírja az Animal szuperosztályú módszert. Ezért display()az alosztályt hívjuk.

Mi van, ha a szuperosztály felülbírált módszerét kell meghívni?

Akkor használjuk, super.display()ha display()meg kell hívni az Animal szuperkategória felülbírált módszerét .

2. példa: szuper a Call Superclass módszer

 class Animal ( // overridden method public void display()( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // overriding method @Override public void display()( System.out.println("I am a dog"); ) public void printMessage()( // this calls overriding method display(); // this calls overridden method super.display(); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printMessage(); ) ) 

Kimenet

 Kutya vagyok, állat vagyok 

Itt van, hogyan működik a fenti program.

2. Hozzáférés a szuperosztály attribútumaihoz

A szuperosztálynak és az alosztálynak lehetnek azonos nevű attribútumai. A superkulcsszót használjuk a szuperosztály attribútumának eléréséhez.

3. példa: Hozzáférés a superclass attribútumhoz

 class Animal ( protected String; ) class Dog extends Animal ( public String; public void printType() ( System.out.println("I am a " + type); System.out.println("I am an " + super.type); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); dog1.printType(); ) ) 

Kimenet :

 Emlős vagyok állat vagyok 

Ebben a példában ugyanazt a példánymezőtípust definiáltuk az Animal szuperosztályban és a Dog alosztályban egyaránt.

Ezután létrehoztunk egy objektum dog1-et a Dog osztályból. Ezután a printType()metódust ennek az objektumnak a felhasználásával hívják meg.

A printType()funkcióban,

  • típus a Kutya alosztály attribútumára utal.
  • A super.type az Állat szuperosztály tulajdonságára utal.

Ezért System.out.println("I am a " + type);nyomatok emlős vagyok. És, System.out.println("I am an " + super.type);nyomatok, állat vagyok.

3. A super () használata a szuperosztály konstruktor eléréséhez

Mint tudjuk, egy osztály objektumának létrehozásakor automatikusan meghívják az alapértelmezett konstruktort.

Ahhoz, hogy kifejezetten felhívjuk a szuperosztályú konstruktort az alosztály konstruktorából, használjuk super(). A superkulcsszó speciális formája .

super() csak az alosztály konstruktorán belül használható, és az első utasításnak kell lennie.

4. példa: A super () használata

 class Animal ( // default or no-arg constructor of class Animal Animal() ( System.out.println("I am an animal"); ) ) class Dog extends Animal ( // default or no-arg constructor of class Dog Dog() ( // calling default constructor of the superclass super(); System.out.println("I am a dog"); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); ) ) 

Kimenet

 Állat vagyok kutya vagyok 

Itt, amikor a Dog osztály objektum dog1 létrehozásra kerül, automatikusan felhívja az adott osztály alapértelmezett vagy argum nélküli konstruktorát.

Az alosztály konstruktorán belül az super()utasítás felhívja a szuperosztály konstruktorát, és végrehajtja a benne lévő utasításokat. Ezért megkapjuk azt a kimenetet, hogy állat vagyok.

Ezután a program folyamata visszatér az alosztály konstruktorához, és végrehajtja a fennmaradó utasításokat. Így vagyok kutya kinyomtatásra kerül.

Használata super()azonban nem kötelező. Még akkor is, ha super()az alosztály konstruktorában nem használják, a fordító implicit módon a szuperosztály alapértelmezett konstruktorát hívja meg.

Miért érdemes tehát redundáns kódot használni, ha a fordító automatikusan meghívja a super () -t?

Szükség van rá, ha az alosztály konstruktorából meg kell hívni a szuperosztály paraméterezett konstruktorát (egy konstruktort, amely argumentumokat vesz fel) .

A paraméterezettnek super()mindig az alosztály konstruktorának törzsében kell lennie az első utasításnak, különben fordítási hibát kapunk.

5. példa: Paraméterezett konstruktor hívása a super () használatával

 class Animal ( // default or no-arg constructor Animal() ( System.out.println("I am an animal"); ) // parameterized constructor Animal(String type) ( System.out.println("Type: "+type); ) ) class Dog extends Animal ( // default constructor Dog() ( // calling parameterized constructor of the superclass super("Animal"); System.out.println("I am a dog"); ) ) class Main ( public static void main(String() args) ( Dog dog1 = new Dog(); ) ) 

Kimenet

 Típus: Állat Kutya vagyok 

A fordító automatikusan felhívhatja a no-arg konstruktort. Paraméterezett konstruktorokat azonban nem hívhat meg.

Ha paraméterezett konstruktort kell meghívni, akkor azt kifejezetten meg kell határoznunk az alosztály konstruktorában.

Vegye figyelembe, hogy a fenti példában kifejezetten a paraméterezett konstruktort hívtuk meg super("Animal"). A fordító ebben az esetben nem hívja meg a szuperosztály alapértelmezett konstruktorát.

érdekes cikkek...