Java >> Java tutorial >  >> Java

Super søgeord i Java

Som vi alle ved, er Java rig på søgeord og er et rent objektorienteret programmeringssprog; i denne artikel vil vi lære om søgeordet Super. Hvis du ikke er bekendt med Child class og Forældreklasse koncepter, tjek de tidligere selvstudier.

Super søgeord - definition og brug

I Java refererer supernøgleordet til et objekt, det vil sige en referencevariabel for et umiddelbart overordnet klasseobjekt. Når du opretter forekomsten af ​​en underklasse, oprettes en forekomst af din overordnede klasse implicit. Supersøgeordet hjælper med at referere til sådanne variabler. Supersøgeordet hjælper med at referere til sådanne variabler. Her er nogle af de almindelige anvendelser af supersøgeordet.

  • Den fungerer som en kalder af superklassemetoden.
  • Supernøgleordet hjælper med at få adgang til superklassekonstruktøren.
  • Programmører bruger også super nøgleordet, fordi både superklasserne og underklasserne har det samme metodenavn. For at kalde metoden for den overordnede klasse inde fra underklassen og undgå det samme metodenavn fra underklassen, bruger Java-programmører supernøgleordet. Det er, når den underordnede klasse tilsidesætter den metode, der allerede er oprettet i den overordnede klasse.

For at have en praktisk forståelse af supersøgeordet skal du have det forudgående kendskab til polymorfi og Arv

Eksempel

class Engineer { 		// Superclass (parent class)
  public void coding() 
  {
    	System.out.println("Computer Engineers are Programmers");
  }
}

class Coder extends Engineer { 		// Subclass (child class)
  public void coding()
  {
    super.coding(); 	// Call the superclass method
    System.out.println("Coders also know different Programming languages");
  }
}

public class Main {
  public static void main(String args[]) {
    Engineer e1 = new Coder(); 	// Creates a Coder object
    e1.coding(); 	// Call the method on the Coder object
  }
}

I dette program har vi metodenavnet coding() i både forældreklassen såvel som børneklassen. Fra Main-klassen har vi oprettet et objekt e1 af den underordnede klasse, der kalder coding() metode. Det kalder coding() metode for den underordnede klasse, hvor super.coding() er ansvarlig for at kalde coding() metoden for den overordnede klasse.

Bemærk, at supernøgleordssætningen skal være den første sætning i den afledte klassekonstruktør.

Få adgang til variabel for superklasse (overordnet klasse)

Programmører kan også bruge supernøgleordet til at få adgang til datamedlemmet (variabler inden for en klasse) af forældreklassen. Supernøgleordet bliver praktisk, når både den overordnede og den underordnede klasse har det samme variabelnavn.

Eksempel

class Engineer { 		// Superclass (parent class)
    	String name = "Karlos";
}
class Coder extends Engineer 
{
// Subclass (child class)
     void printName() {  
        String name = "Ray"; 
    System.out.println(name);     
    System.out.println(super.name);
    }
}

public class Main {
  public static void main(String args[]) {
    Coder e1 = new Coder(); 	
    e1.printName(); 
  }
}


I dette program har vi sat to strengtypevariabler med samme navn. En 'navn'-variabel i den overordnede klasse og den anden i den underordnede klasse, men med forskellige værdier tildelt hver af dem. Nu, fra underordnede klassemetoden, hvis du ønsker at få adgang til variablen for den overordnede klasse ved at omgå det samme variabelnavn, skal vi bruge supernøgleordet som vist System.out.println(super.name); . For at få adgang til den underordnede klassevariabel skal vi blot bruge System.out.println(name); .

Få adgang til superklassemetoden

Vi bruger supersøgeordet, når der er to metoder (i forældreklassen og børneklassen) med samme navn. Supernøgleordet kommer til undsætning, når programmører ønsker at kalde metoden for den overordnede klasse inde fra underklassen og undgå det samme metodenavn fra underklassen. Her er et kodestykke, der viser brugen af ​​super med denne funktionalitet.

Eksempel

class Engineer { 		// Superclass (parent class)
    	void message()
    	{
    	    System.out.println("This is parent class");
    	}
}

class Coder extends Engineer 
{
void message()
    	{
    	    System.out.println("This is child class");
    	}
    	void display() 
   	 { 
        // this method call will invoke message() method of the current class
        message(); 
  
        // this method call will invoke message() method of the parent class
        super.message(); 
    } 
}

public class Main {
  public static void main(String args[]) {
    Coder e1 = new Coder(); 	
    e1.display(); 
  }
}

Her har vi også oprettet et objekt e1 af den underordnede klasse, der kalder message() metode. Den kalder message() metode for den underordnede klasse, inden for hvilken super.message() er ansvarlig for at kalde message() metoden for den overordnede klasse.

Processen med at kalde den overordnede klassemetode og ignorere den underordnede klassemetode kaldes metodetilsidesættelse.

Få adgang til konstruktør af en superklasse

Programmører bruger også supernøgleordet til at få adgang til konstruktøren af ​​den overordnede klasse. Super nøgleordet kan også kalde både parameteriserede og ikke-parametriserede konstruktører baseret på konstruktørtypen og -koden. Her er et kodestykke, der viser dets brug.

Eksempel

class Engineer { 	// Superclass (parent class)
    	Engineer()
    	{
    	    System.out.println("This is a parent class constructor");
    	}
}

class Coder extends Engineer 
{
    Coder()
{
    	    super();    // this will invoke the constructor of the parent class
    	    System.out.println("This is a child class constructor");
    	}
}

public class Main {
  public static void main(String args[]) {
    Coder e1 = new Coder(); 	
  }
}

Også her har vi to separate konstruktører af de to respektive klasser. Vi har også oprettet et objekt e1 af den underordnede klasse, der automatisk kalder Coder-klassekonstruktøren, når objektet bliver oprettet. Coder() konstruktøren kalder derefter super() , som hjælper med at kalde konstruktøren af ​​den overordnede klasse inde fra den underordnede klasse.

Hvad hvis den underordnede klasse ikke tilsidesætter metoden for overordnet klasse?

Der er visse situationer, hvor den underordnede klasse ikke tilsidesætter metoden for sin overordnede klasse. I så fald behøver vi ikke bruge supersøgeordet med metoden dummy child class. I sådan en situation har vi kun én version af metoden. I henhold til reglen om arv kan den underordnede klasse få adgang til den overordnede klassemetode. Derfor kan vi direkte påberåbe parent class-metoden uden at bruge supernøgleordet.

Eksempel

class Engineer { 	// Superclass (parent class)
    	void disp()
    	{
    	    System.out.println("This is a parent class");
    	}
}

class Coder extends Engineer 
{
        void Printt()
        {
    	    disp();    
    	}
}

public class Main {
  public static void main(String args[]) {
    Coder e1 = new Coder(); 	
    e1.Printt();
  }
}

I dette program har vi ikke brugt supersøgeordet, fordi den underordnede klasse i henhold til nedarvningsreglen kan få adgang til den overordnede klassemetode, som vores disp() metode gjorde. Kalder disp() fra Printt() i den underordnede klasse blot kaldet disp() metoden for den overordnede klasse.


Java tag