Ключовата дума super се използва в различни ситуации. Преди да започнете с тази публикация, препоръчваме ви да научите за наследяването в Java за по-добро разбиране.
Коя е ключовата дума super в Java?
Super е ключова дума, която може да се използва за извикване на заменени методи на суперкласа, Howто и за препратка към скрити полета на суперкласа.Защо и кога да използваме ключовата дума super?
Ключовата дума Java super има три изрични applications.- Достъп до членовете данни на родителския клас, когато дъщерният клас също има членове данни със същото име.
- Извикайте конструкторите по подразбиране or параметризираните конструктори на родителския клас в дъщерния клас.
- Извикайте методите на родителския клас в дъщерния клас, ако детето има заместени методи.
Пример 1 - Достъп до членовете на данните на родителя
Пример 1 илюстрира How атрибутите or членовете на данните на класа Vehicle могат да бъдат достъпни в дъщерния клас тип Car . Уверете се, че изпълнявате фрагмента по-долу, за да разберете добре.
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();
}
}
Изход
Името на моята кола: кола Името на моето родителско превозно средство: превозно средство
Пример 2 - Достъп до конструкторите на родител в дъщерен клас
Изричното извикване на super() ви позволява да получите достъп Howто до конструктора по подразбиране, така и до параметризирания конструктор на родителския клас в дъщерния клас. Ето пример за параметризиран конструктор. Конструкторът на родителския, т.е. клас Shape , се извиква (използвайки super() ) в дъщерния, т.е. клас Triangle , за да зададе атрибутите. Стартирайте програмата по-долу, за да тествате изхода сами.
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);
}
}
Изход
Извикан параметризиран конструктор Shape()! Извикан параметризиран конструктор на Triangle()! Триъгълник алфа жълто
Бързо предизвикателство : Преработете горната програма, като използвате конструктора по подразбиране, за да тествате обучението си. Освен това вижте How super() е различен от super(arg) .
Пример 3 - Достъп до заместения метод на родителя в дъщерен клас
Пример 3 показва How можете да получите достъп до методите на родителския клас, които дъщерният клас също дефинира. Родителският клас Sound в програмата по-долу дефинира метод voice() . Дъщерният клас Drum също има метод със същото име, т.е. voice() . Това означава, че гласът на метода е заменен от подкласа. Стартирайте програмата по-долу, за да научите How ключовата дума super е необходима за използване на методите на родителския клас в дъщерния клас.
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();
}
}
Изход
Извикан параметризиран конструктор Shape()! Извикан параметризиран конструктор на Triangle()! Триъгълник алфа жълто
GO TO FULL VERSION