Java super ključna riječ (s primjerima)

U ovom ćemo uputstvu uz primjere naučiti o ključnoj riječi super u Javi.

superKljučna riječ u Java se koristi u podrazreda za pristup superclass članova (atributa, graditelja i metode).

Prije nego što naučimo o superključnoj riječi, pobrinite se da znate o nasljeđivanju Java.

Upotreba super ključne riječi

  1. Pozvati metode superklase koja je nadjačana u podklasi.
  2. Pristup atributima (poljima) superklase ako i superklasa i podklasa imaju atribute s istim imenom.
  3. Da se iz konstruktora podklase izričito pozove superklasa no-arg (zadano) ili parametarski konstruktor.

Razumijemo svaku od ovih upotreba.

1. Pristup nadjačanim metodama superklase

Ako su metode s istim imenom definirane i u superklasi i u podrazredu, metoda u podrazredu nadjačava metodu u superklasi. To se naziva nadjačavanje metode.

Primjer 1: Nadjačavanje metode

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

Izlaz

 Ja sam pas 

U ovom primjeru, izradom objekta dog1 klase Dog možemo nazvati njegovu metodu printMessage () koja zatim izvršava display()izraz.

Budući da display()je definirana u obje klase, metoda potklase Dog nadjačava metodu superklase Animal. Stoga display()se naziva podrazred.

Što ako se mora nazvati nadjačana metoda superklase?

Koristimo super.display()ako display()treba pozvati nadjačanu metodu superklase Životinja.

Primjer 2: super za pozivanje metode Superclass

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

Izlaz

 Ja sam pas Ja sam životinja 

Evo kako funkcionira gornji program.

2. Pristupiti atributima superrazrede

Nadrazred i podrazred mogu imati atribute s istim imenom. superKljučnu riječ koristimo za pristup atributu superklase.

Primjer 3: Pristup atributu superklase

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

Izlaz :

 Ja sam sisavac Ja sam životinja 

U ovom smo primjeru definirali isti tip polja instance i u superklasi Animal i u podklasi Dog.

Zatim smo stvorili objekt dog1 klase Dog. Zatim se printType()metoda poziva pomoću ovog objekta.

Unutar printType()funkcije,

  • vrsta odnosi se na atribut potklase Pas.
  • super.tip odnosi se na atribut superklase Životinja.

Dakle, System.out.println("I am a " + type);otisci Ja sam sisavac. I, System.out.println("I am an " + super.type);otisci Ja sam životinja.

3. Upotreba super () za pristup konstruktoru superklase

Kao što znamo, kada se kreira objekt klase, automatski se poziva njegov zadani konstruktor.

Da bismo eksplicitno pozvali konstruktor superklase iz konstruktora podklase, koristimo super(). To je poseban oblik superključne riječi.

super() može se koristiti samo unutar konstruktora potklase i mora biti prva izjava.

Primjer 4: Upotreba super ()

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

Izlaz

 Ja sam životinja Ja sam pas 

Ovdje, kada se kreira objekt dog1 klase Dog, on automatski poziva zadani ili no-arg konstruktor te klase.

Unutar konstruktora podklase, super()naredba poziva konstruktor superklase i izvršava izraze unutar nje. Dakle, dobivamo rezultat Ja sam životinja.

Tok programa zatim se vraća natrag u konstruktor podklase i izvršava preostale izraze. Dakle, ja sam pas bit će tiskan.

Međutim, korištenje super()nije obvezno. Čak i ako super()se ne koristi u konstruktoru podklase, kompajler implicitno poziva zadani konstruktor superklase.

Pa, zašto koristiti suvišni kôd ako kompajler automatski poziva super ()?

Potrebno je ako parametarski konstruktor (konstruktor koji uzima argumente) superklase mora biti pozvan iz konstruktora potklase.

Parametrizirano super()uvijek mora biti prva izjava u tijelu konstruktora podklase, u suprotnom dobivamo pogrešku kompilacije.

Primjer 5: Pozivanje parametarskog konstruktora pomoću 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(); ) ) 

Izlaz

 Tip: Životinja Ja sam pas 

Prevoditelj može automatski pozvati konstruktor no-arg. Međutim, ne može pozvati parametrizirane konstruktore.

Ako se mora pozvati parametrizirani konstruktor, moramo ga izričito definirati u konstruktoru podklase.

Imajte na umu da smo u gornjem primjeru izričito nazvali parametrizirani konstruktor super("Animal"). Prevoditelj u ovom slučaju ne poziva zadani konstruktor superklase.

Zanimljivi članci...