Java-superavainsana (esimerkkien avulla)

Tässä opetusohjelmassa opitaan Java-superavainsanasta esimerkkien avulla.

superAvainsanaa Java käytetään alaluokkien pääsyn superclass jäsenille (attribuutteja, rakentajat ja menetelmät).

Ennen kuin opimme superavainsanasta, muista tietää Java-perintö.

Supersanan käyttö

  1. Alaluokassa ohitetun yliluokan menetelmien kutsuminen.
  2. Pääsy yliluokan määritteisiin (kenttiin), jos sekä yliluokalla että aliluokalla on sama nimi.
  3. Yliluokan kutsuminen nimenomaisesti no-arg (oletus) tai parametrisoiduksi rakentajaksi alaluokan konstruktorista.

Ymmärretään jokainen näistä käyttötarkoituksista.

1. Käytä yliluokan ohitettuja menetelmiä

Jos menetelmät, joilla on sama nimi, määritellään sekä yliluokassa että alaluokassa, aliluokan menetelmä ohittaa menetelmän yliluokassa. Tätä kutsutaan menetelmän ohittamiseksi.

Esimerkki 1: Menetelmän ohittaminen

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

Tuotos

 olen koira 

Tässä esimerkissä tekemällä Koira-luokan objektikoira1 voimme kutsua sen menetelmää printMessage (), joka sitten suorittaa display()käskyn.

Koska se display()on määritelty molemmissa luokissa, alaluokan menetelmä Koira ohittaa eläinluokan menetelmän. Näin ollen display()alaluokan kutsutaan.

Entä jos yliluokan ohitettu menetelmä on kutsuttava?

Käytämme, super.display()jos display()yliluokka Animal -menetelmä on kutsuttava.

Esimerkki 2: super-Call Superclass -menetelmä

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

Tuotos

 Olen koira, olen eläin 

Tässä miten yllä oleva ohjelma toimii.

2. Käytä Superclass-määritteitä

Yliluokalla ja alaluokalla voi olla sama nimi. Käytämme superavainsanaa päästäksesi yliluokan attribuuttiin.

Esimerkki 3: Käytä superluokan määritettä

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

Tuotos :

 Olen nisäkäs Olen eläin 

Tässä esimerkissä olemme määrittäneet saman esiintymäkenttätyypin sekä yläluokan eläin- että aliluokka-koiralle.

Sitten loimme Koira-luokan objektikoiran1. Sitten printType()menetelmää kutsutaan tämän objektin avulla.

printType()Toiminnon sisällä

  • tyyppi viittaa alaluokan Koira määritteeseen.
  • super.type viittaa superluokan Animal määritteeseen.

Siksi System.out.println("I am a " + type);tulosteita olen nisäkäs. Ja, System.out.println("I am an " + super.type);tulosteita, olen eläin.

3. Käytä super (): ää päästäksesi yliluokan rakentajaan

Kuten tiedämme, kun luokan objekti luodaan, sen oletusrakentaja kutsutaan automaattisesti.

Soittaaksemme yliluokan konstruktorin nimenomaisesti alaluokan konstruktorista käytämme super(). Se on superavainsanan erityinen muoto .

super() voidaan käyttää vain alaluokkarakentajan sisällä, ja sen on oltava ensimmäinen käsky.

Esimerkki 4: super (): n käyttö

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

Tuotos

 Olen eläin olen koira 

Kun luodaan Koira-luokan objektikoira1, se kutsuu automaattisesti kyseisen luokan oletus- tai ei-arg-konstruktoria.

Alaluokarakentajan sisällä super()käsky kutsuu yläluokan rakentajan ja suorittaa sen sisällä olevat lauseet. Siksi saamme tuotoksen, jonka olen eläin.

Ohjelman kulku palaa sitten takaisin alaluokan rakentajaan ja suorittaa muut käskyt. Siksi olen koira tulostetaan.

Käyttäminen super()ei kuitenkaan ole pakollista. Vaikka super()kääntäjää ei käytettäisi aliluokan konstruktorissa, se kutsuu implisiittisesti yläluokan oletuskonstruktoria.

Joten miksi käyttää turhaa koodia, jos kääntäjä kutsuu automaattisesti super ()?

Se vaaditaan, jos yliluokan parametrisoitu konstruktori (konstruktori, joka ottaa argumentit) on kutsuttava alaluokan konstruktorista.

Parametroidun super()on aina oltava ensimmäinen lauseke alaluokan rakentajan rungossa, muuten saadaan käännösvirhe.

Esimerkki 5: Soita parametrisoitua rakennuttajaa käyttäen 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(); ) ) 

Tuotos

 Tyyppi: Eläin Olen koira 

Kääntäjä voi soittaa automaattisesti ei-arg-konstruktorille. Se ei kuitenkaan voi kutsua parametrisoituja konstruktoreita.

Jos parametrisoitu konstruktori on kutsuttava, meidän on määriteltävä se nimenomaisesti alaluokan konstruktorissa.

Huomaa, että yllä olevassa esimerkissä kutsumme nimenomaan parametrisoitua konstruktoria super("Animal"). Kääntäjä ei kutsu tässä tapauksessa yläluokan oletusrakentajaa.

Mielenkiintoisia artikkeleita...