„Java super“ raktinis žodis (su pavyzdžiais)

Šioje pamokoje sužinosime apie „super“ raktinį žodį „Java“ pavyzdžių pagalba.

superJava “ raktinis žodis naudojamas poklasiuose norint pasiekti superklasės narius (atributus, konstruktorius ir metodus).

Prieš sužinodami apie superraktinį žodį, būtinai žinokite apie „Java“ paveldėjimą.

„Super keyword“ naudojimas

  1. Skambinti poklasyje nepaisomų superklasės metodais.
  2. Norėdami pasiekti superklasės atributus (laukus), jei ir superklasė, ir poklasis turi atributus tuo pačiu pavadinimu.
  3. Iš poklasio konstruktoriaus aiškiai vadinti superklasę „no-arg“ (numatytasis) arba parametruojamą konstruktorių.

Supraskime kiekvieną iš šių naudojimo būdų.

1. Prieiga prie nepaisomų superklasės metodų

Jei metodai tuo pačiu pavadinimu yra apibrėžti ir superklasėje, ir poklasyje, poklasio metodas pakeičia viršutiniame klase esantį metodą. Tai vadinama metodo viršijimu.

1 pavyzdys: metodas svarbesnis

 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(); ) ) 

Rezultatas

 Aš esu šuo 

Šiame pavyzdyje padarę „Dog“ klasės objektą dog1, jo metodą galime pavadinti printMessage (), kuris tada vykdo display()sakinį.

Kadangi jis display()yra apibrėžtas abiejose klasėse, šuns poklasio metodas viršija gyvūno superklasės metodą. Vadinasi, display()poklasis vadinamas.

Ką daryti, jei tenka vadinti nepaisomą superklasės metodą?

Mes naudojame, super.display()jei display()reikia vadinti nepaisomą superklasės „Animal“ metodą .

2 pavyzdys: „Super to Call Superclass“ metodas

 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(); ) ) 

Rezultatas

 Aš esu šuo, aš esu gyvūnas 

Kaip veikia aukščiau nurodyta programa.

2. Prieiga prie superklasės atributų

Superklase ir poklasyje gali būti atributai tuo pačiu pavadinimu. Mes naudojame superraktinį žodį, norėdami pasiekti superklasės atributą.

3 pavyzdys: Prieiga prie superklasės atributo

 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(); ) ) 

Išvestis :

 Aš esu žinduolis, aš esu gyvūnas 

Šiame pavyzdyje mes apibrėžėme tą patį egzemplioriaus lauko tipą tiek superklasės „Animal“, tiek „subclass Dog“.

Tada mes sukūrėme „Dog“ klasės objektą dog1. Tada printType()metodas vadinamas naudojant šį objektą.

printType()Funkcijos viduje

  • tipas nurodo šuns poklasio atributą.
  • super.type nurodo superklasės Gyvūnas atributą.

Taigi, System.out.println("I am a " + type);atspaudai esu žinduolis. Ir, System.out.println("I am an " + super.type);atspaudai, aš esu gyvūnas.

3. Super () naudojimas norint pasiekti superklasės konstruktorių

Kaip žinome, kai kuriamas klasės objektas, automatiškai iškviečiamas numatytasis jo konstruktorius.

Norėdami aiškiai paskambinti superklasės konstruktoriui iš poklasio konstruktoriaus, mes naudojame super(). Tai ypatinga superraktinio žodžio forma .

super() gali būti naudojamas tik poklasio konstruktoriaus viduje ir turi būti pirmasis teiginys.

4 pavyzdys: super () naudojimas

 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(); ) ) 

Rezultatas

 Aš esu gyvūnas, aš esu šuo 

Čia, kai sukuriamas „Dog“ klasės objektas dog1, jis automatiškai iškviečia tos klasės numatytąjį arba be argumentų konstruktorių.

Poklasio konstruktoriaus viduje super()sakinys iškviečia superklasės konstruktorių ir vykdo jame esančius teiginius. Taigi gauname produkciją, kurią aš esu gyvūnas.

Tada programos srautas grįžta atgal į poklasio konstruktorių ir vykdo likusius sakinius. Taigi, aš esu šuo bus atspausdintas.

Tačiau naudoti super()neprivaloma. Net jei super()jis nenaudojamas poklasio konstruktoriuje, kompiliatorius netiesiogiai vadina numatytąjį superklasės konstruktorių.

Taigi, kodėl naudoti nereikalingą kodą, jei kompiliatorius automatiškai iškviečia super ()?

Jis reikalingas, jei iš poklasio konstruktoriaus reikia iškviesti parametruojamą konstruktorių (konstruktorių, kuris priima argumentus) iš superklasės.

Parametruotas parametras super()visada turi būti pirmasis sakinys poklasio konstruktoriaus kūne, priešingu atveju gauname kompiliavimo klaidą.

5 pavyzdys: Parametruoto konstruktoriaus iškvietimas naudojant super ()

 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(); ) ) 

Rezultatas

 Tipas: Gyvūnas Aš esu šuo 

Kompiliatorius gali automatiškai iškviesti konstruktorių be argumentų. Tačiau jis negali paskambinti parametruojamais konstruktoriais.

Jei reikia iškviesti parametrizuotą konstruktorių, turime jį aiškiai apibrėžti poklasio konstruktoriuje.

Atkreipkite dėmesį, kad aukščiau pateiktame pavyzdyje mes aiškiai vadinome parametruojamą konstruktorių super("Animal"). Kompiliatorius šiuo atveju nevadina numatytojo superklasės konstruktoriaus.

Įdomios straipsniai...