Supernyckelordet används i olika situationer . Innan du börjar med det här inlägget uppmuntrar vi dig att lära dig om arv i Java för en bättre förståelse.
Vad är supernyckelordet i Java?
Super är ett nyckelord som kan användas för att anropa åsidosatta metoder för superklassen, samt för att referera till dolda fält i superklassen.Varför och när ska man använda supersökordet?
Java supernyckelordet har tre explicita användningsområden.- Få åtkomst till datamedlemmarna i den överordnade klassen när den underordnade klassen också har datamedlemmar med samma namn.
- Anropa standard- eller parametriserade konstruktorer för den överordnade klassen i den underordnade klassen.
- Anropa föräldraklassmetoderna i underklassen om barnet har åsidosatta metoder.
Exempel 1 - Åtkomst till förälderns datamedlemmar
Exempel 1 illustrerar hur attributen eller datamedlemmarna i fordonsklassen kan nås i underklassen Biltyp . Se till att du kör utdraget nedan för att förstå det.
class Vehicle {
String name = "vehicle";
}
class Car extends Vehicle {
String name = "car";
public void printMyName() {
System.out.println(name);
}
public void printParentName() {
// use super keyword to access
// parent's data member / attribute
System.out.println(super.name);
}
public static void main(String[] args) {
Car myCar = new Car();
System.out.print("My Car's Name: ");
myCar.printMyName();
// printing the parent's name
// using the super keyword
System.out.print("My Parent Vehicle's Name: ");
myCar.printParentName();
}
}
Produktion
Min bils namn: bil Min moderbils namn: fordon
Exempel 2 - Åtkomst till förälderns konstruktörer i underordnad klass
Att explicit anropa super() ger dig åtkomst till både standardkonstruktorn eller parametriserad konstruktor för den överordnade klassen i den underordnade klassen. Här är ett exempel på den parametriserade konstruktorn. Föräldern, dvs. Shape -klassens konstruktor, anropas (med super() ) i den underordnade, dvs. Triangle -klassen, för att ställa in attributen. Kör programmet nedan för att testa resultatet själv.
public class Shape {
String name;
public Shape(String n) {
System.out.println("Shape() parameterized constructor called!");
name = n;
}
}
class Triangle extends Shape {
int sides = 3;
String color;
public Triangle(String n, String c) {
// The super keyword calls the parameterized
// constructor of the parent (Shape) with
// 'n' as a parameter
super(n);
System.out.println("Triangle() parameterized constructor called!");
this.color = c;
}
public static void main(String[] args) {
Triangle myTriangle = new Triangle("Triangle Alpha", "Yellow");
System.out.println(myTriangle.name);
System.out.println(myTriangle.color);
}
}
Produktion
Shape() parametriserad konstruktor anropad! Triangle() parametriserad konstruktor anropad! Triangel Alpha Gul
Snabb utmaning : Gör om programmet ovan genom att använda standardkonstruktorn för att testa din inlärning. Se också hur super() skiljer sig från super(arg) .
Exempel 3 - Åtkomst till förälderns åsidosatta metod i barnklass
Exempel 3 visar hur du kan komma åt metoderna för förälders klass som barnklassen också definierar. Förälderklassen Sound i programmet nedan definierar en metod voice() . Barnklassen Drum har också en metod med samma namn, dvs voice() . Det betyder att metodrösten åsidosätts av underklassen. Kör programmet nedan för att lära dig hur supernyckelordet är nödvändigt för att använda föräldraklassens metoder i underklassen.
public class Sound {
public void voice() {
System.out.println("Play sound!");
}
}
class Drum extends Sound {
public void voice() {
System.out.println("Play drums!");
}
public void play() {
// The super keyword calls the
// voice() method of the parent
super.voice();
voice();
}
public static void main(String[] args) {
Drum myDrum = new Drum();
myDrum.play();
}
}
Produktion
Shape() parametriserad konstruktor anropad! Triangle() parametriserad konstruktor anropad! Triangel Alpha Gul
GO TO FULL VERSION