Java super märksõna (koos näidetega)

Selles õpetuses õpime näidete abil Java super märksõna.

Javasõna supermärksõna kasutatakse alamklassides juurdepääsuks superklassiliikmetele (atribuudid, konstruktorid ja meetodid).

Enne kui me supermärksõnaga tutvume, veenduge, et oleksite teadlik Java pärandist.

Super märksõna kasutamine

  1. Alamklassis alistatud superklassimeetodite kutsumine.
  2. Superklassi atribuutidele (väljadele) juurdepääsemiseks, kui nii üleklassil kui ka alamklassil on sama nimega atribuudid.
  3. Alamklassikonstruktorist selgesõnaliselt superklassi kutsumine no-arg (vaikimisi) või parameetriga konstruktor.

Mõistame kõiki neid kasutusviise.

1. Juurdepääs superklassi alistatud meetoditele

Kui nii super- kui alaklassis on määratletud sama nimega meetodid, alistab alamklassis olev meetod superklassis oleva meetodi. Seda nimetatakse meetodi ületamiseks.

Näide 1: meetodi ülimuslikkus

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

Väljund

 Olen koer 

Selles näites, tehes objektiks dog1 koeraklassi, võime selle meetodit kutsuda printMessage (), mis seejärel täidab display()avalduse.

Kuna see display()on määratletud mõlemas klassis, siis alamklassi meetod Koer alistab superklassilise looma meetodi. Seega display()nimetatakse alamklassi.

Mis siis, kui tuleb kutsuda superklassist välja jäetud meetodit?

Me kasutame seda, super.display()kui on display()vaja kutsuda üliklassitud looma meetodit .

Näide 2: superkõne superklassi meetod

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

Väljund

 Olen koer olen loom 

Siit saate teada, kuidas ülaltoodud programm töötab.

2. Juurdepääs superklasside atribuutidele

Üleklassil ja alaklassil võivad olla sama nimega atribuudid. Me kasutame supermärksõna, et pääseda juurde superklassi atribuudile.

Näide 3: Juurdepääs atribuudile superklass

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

Väljund :

 Olen imetaja, olen loom 

Selles näites oleme defineerinud sama eksemplari välja tüübi nii superklassis Animal kui ka alaklassis Dog.

Seejärel lõime koera objekti koera1. Seejärel printType()nimetatakse meetodit selle objekti abil.

printType()Funktsiooni sees

  • tüüp viitab alamklassi Koer atribuudile.
  • supertüüp viitab superklasside looma atribuudile.

Seega, System.out.println("I am a " + type);trükised olen imetaja. Ja System.out.println("I am an " + super.type);prindib, et olen loom.

3. Super () kasutamine superklass-konstruktori juurde pääsemiseks

Nagu teame, kutsutakse klassi objekti loomisel automaatselt selle vaikekonstruktorit.

Alamklassikonstruktorist selgesõnaliselt üleklassikonstruktori kutsumiseks kasutame super(). See on supermärksõna erivorm .

super() saab kasutada ainult alaklassi konstruktori sees ja see peab olema esimene lause.

Näide 4: super () kasutamine

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

Väljund

 Olen loom, olen koer 

Siin, kui luuakse koeraklassi objekt dog1, kutsub see automaatselt selle klassi vaikimisi või argumendi puuduva konstruktori.

Alamklassi konstruktori sees super()kutsub lause välja superklasside konstruktori ja täidab selle sees olevad laused. Seega saame väljundi, mis olen loom.

Seejärel naaseb programmi voog tagasi alaklassi konstruktori juurde ja täidab ülejäänud laused. Seega olen koer on trükitud.

Kasutamine super()pole siiski kohustuslik. Isegi kui super()seda alamklassi konstruktoris ei kasutata, kutsub kompilaator vaikimisi superklassi vaikekonstruktorit.

Niisiis, miks kasutada üleliigset koodi, kui kompilaator kutsub automaatselt super ()?

See on vajalik, kui alamklassi konstruktorilt tuleb kutsuda superklassi parameetriga konstruktor (konstruktor, mis võtab argumente) .

Parameetrid super()peavad alati olema alamklassi konstruktori kehas esimene lause, vastasel juhul saame kompileerimisvea.

Näide 5: Parameetriga konstruktori kõne super () abil

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

Väljund

 Tüüp: Loom Olen koer 

Kompilaator saab argumendi-konstruktori automaatselt välja kutsuda. Kuid see ei saa helistada parameetriga konstruktoritele.

Kui tuleb kutsuda parameetriga konstruktor, peame selle selgesõnaliselt defineerima alamklassi konstruktoris.

Pange tähele, et ülaltoodud näites nimetasime selgesõnaliselt parametriseeritud konstruktorit super("Animal"). Koostaja ei kutsu sel juhul superklassi vaikekonstruktorit.

Huvitavad Artiklid...