Java super atslēgvārds (ar piemēriem)

Šajā apmācībā mēs uzzināsim par super atslēgvārdu Java ar piemēru palīdzību.

superAtslēgvārdu Java izmanto apakšklases lai piekļūtu superclass dalībniekiem (atribūtiem, būvniekiem un metodes).

Pirms uzzinām par superatslēgvārdu, noteikti jāzina par Java mantošanu.

Super atslēgvārda izmantošana

  1. Lai izsauktu apakšklasē ignorētās virsklases metodes.
  2. Piekļūt virsklases atribūtiem (laukiem), ja gan superklasei, gan apakšklasei ir atribūti ar tādu pašu nosaukumu.
  3. Lai no apakšklases konstruktora nepārprotami izsauktu superklasi no-arg (noklusējums) vai parametrizētu konstruktoru.

Sapratīsim katru no šiem lietojumiem.

1. Piekļūstiet superklases ignorētajām metodēm

Ja metodes ar tādu pašu nosaukumu ir definētas gan virsklasē, gan apakšklasē, apakšklasē esošā metode ignorē metodi virsklasē. To sauc par metodes ignorēšanu.

1. piemērs: Metodes ignorēšana

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

Rezultāts

 Es esmu suns 

Šajā piemērā, izveidojot suns klases objektu dog1, mēs varam izsaukt tā metodi printMessage (), kas pēc tam izpilda display()paziņojumu.

Tā kā tas display()ir definēts abās klasēs, suņu apakšklases metode ignorē dzīvnieku augstākās klases metodi. Tādējādi display()tiek saukta apakšklases.

Ko darīt, ja ir jāsauc ignorētā superklases metode?

Mēs izmantojam, super.display()ja ir jāizsauc display()pārspētētā superklases Dzīvnieka metode .

2. piemērs: super, lai izsauktu Superclass metodi

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

Rezultāts

 Es esmu suns, es esmu dzīvnieks 

Lūk, kā darbojas iepriekš minētā programma.

2. Piekļūstiet superklases atribūtiem

Virsklasei un apakšklasei var būt atribūti ar tādu pašu nosaukumu. Mēs izmantojam superatslēgvārdu, lai piekļūtu virsklases atribūtam.

3. piemērs: Piekļūstiet augstākās klases atribūtam

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

Izeja :

 Es esmu zīdītājs Es esmu dzīvnieks 

Šajā piemērā mēs esam definējuši vienu un to pašu gadījuma lauka tipu gan augstākās klases dzīvniekā, gan apakšklasē Suns.

Tad mēs izveidojām objekta suns1 suni. Pēc tam printType()metodi sauc, izmantojot šo objektu.

printType()Funkcijas iekšpusē

  • tips attiecas uz apakšklases Suns atribūtu.
  • super.type attiecas uz superklases Dzīvnieks atribūtu.

Tādējādi System.out.println("I am a " + type);izdrukas esmu zīdītājs. Un, System.out.println("I am an " + super.type);izdrukas esmu dzīvnieks.

3. Super () izmantošana, lai piekļūtu superklases konstruktoram

Kā mēs zinām, kad tiek izveidots klases objekts, tā automātiski tiek izsaukts tā noklusējuma konstruktors.

Lai nepārprotami izsauktu superklases konstruktoru no apakšklases konstruktora, mēs izmantojam super(). Tā ir īpaša superatslēgvārda forma .

super() var izmantot tikai apakšklases konstruktora iekšienē, un tam jābūt pirmajam paziņojumam.

4. piemērs: super () izmantošana

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

Rezultāts

 Es esmu dzīvnieks, esmu suns 

Šeit, kad tiek izveidots objekta dog1 Dog kategorija, tas automātiski izsauc šīs klases noklusējuma vai no-arg konstruktoru.

Apakšklases konstruktora iekšienē super()paziņojums izsauc augstākās klases konstruktoru un izpilda tajā esošos apgalvojumus. Tādējādi mēs iegūstam rezultātu es esmu dzīvnieks.

Pēc tam programmas plūsma atgriežas apakšklases konstruktorā un izpilda pārējos paziņojumus. Tādējādi es esmu suns tiks izdrukāts.

Tomēr lietošana super()nav obligāta. Pat ja super()tas netiek izmantots apakšklases konstruktorā, kompilators netieši izsauc augstākās klases noklusējuma konstruktoru.

Tātad, kāpēc izmantot lieko kodu, ja kompilators automātiski izsauc super ()?

Tas ir nepieciešams, ja no apakšklases konstruktora ir jāizsauc parametrizētais konstruktors (konstruktors, kurš ņem argumentus) no klases.

Parametram super()vienmēr jābūt pirmajam apgalvojumam apakšklases konstruktora ķermenī, pretējā gadījumā mēs iegūstam kompilācijas kļūdu.

5. piemērs: izsaukt parametrizētu konstruktoru, izmantojot 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(); ) ) 

Rezultāts

 Tips: Dzīvnieks Es esmu suns 

Sastādītājs var automātiski izsaukt konstruktoru bez argumentiem. Tomēr tas nevar izsaukt parametrizētus konstruktorus.

Ja jāsauc parametrizēts konstruktors, mums tas ir skaidri jādefinē apakšklases konstruktorā.

Ņemiet vērā, ka iepriekš minētajā piemērā mēs skaidri nosaucām parametrizēto konstruktoru super("Animal"). Sastādītājs šajā gadījumā nesauc augstākās klases noklusējuma konstruktoru.

Interesanti raksti...