Słowo kluczowe super jest używane w różnych sytuacjach. Aby lepiej zrozumieć ten post zachęcamy, żeby najpierw zapoznać się z dziedziczeniem w Javie.
![Słowo kluczowe Super w Javie - 1]()
Co robi słowo kluczowe Super w Java?
Super konstrukcja, której można użyć do wywołania przesłoniętych metod lub do odwoływania się do ukrytych pól klasy nadrzędnej (nadklasy).Dlaczego i kiedy używać słowa kluczowego super?
Słowo kluczowe super w Javie ma trzy konkretne zastosowania.- Dostęp do pól danych klasy nadrzędnej, gdy podklasa posiada pola o tej samej nazwie.
- Wywołanie domyślnych lub sparametryzowanych konstruktorów klasy nadrzędnej w podklasie.
- Wywołanie metod klasy nadrzędnej w podklasie, jeżeli klasa podrzędna przesłania metody.
Przykład 1. — Dostęp do pól danych nadklasy
Przykład 1. ilustruje jak z podklasy Car można uzyskać dostęp do atrybutów i pól danych nadklasy Vehicle. Uruchom poniższy fragment kodu, aby dobrze to zrozumieć.
class Vehicle {
String name = "pojazd";
}
class Car extends Vehicle {
String name = "samochód";
public void printMyName() {
System.out.println(name);
}
public void printParentName() {
// użyj słowa kluczowego super aby uzyskać dostęp
// do pola danych / atrybutu nadklasy
System.out.println(super.name);
}
public static void main(String[] args) {
Car myCar = new Car();
System.out.print("Nazwa mojego samochodu: ");
myCar.printMyName();
// wyświetlanie nazwy nadklasy
// przy pomocy słowa kluczowego super
System.out.print("Nazwa mojego nadrzędnego pojazdu: ");
myCar.printParentName();
}
}
Wyjście:
Nazwa mojego samochodu: samochód
Nazwa mojego nadrzędnego pojazdu: pojazd
Przykład 2. — Dostęp do konstruktorów klasy nadrzędnej z podklasy
Jawne wywołanie super() pozwala uzyskać dostęp do domyślnych lub sparametryzowanych konstruktorów klasy nadrzędnej z poziomu podklasy. Oto przykład sparametryzowanego konstruktora. Konstruktor nadklasy Shape jest wywoływany (za pomocą super()) z podklasy Triangle, aby ustawić atrybuty. Uruchom poniższy program, aby samodzielnie przetestować dane wyjściowe.
public class Shape {
String name;
public Shape(String n) {
System.out.println("Wywołano sparametryzowany konstruktor Shape()!");
name = n;
}
}
class Triangle extends Shape {
int sides = 3;
String color;
public Triangle(String n, String c) {
// Słowo kluczowe super wywołuje sparametryzowany
// konstruktor nadklasy (Shape) z
// 'n' jako parametrem
super(n);
System.out.println("Wywołano sparametryzowany konstruktor Triangle()!");
this.color = c;
}
public static void main(String[] args) {
Triangle myTriangle = new Triangle("Trójkąt Alfa", "Żółty");
System.out.println(myTriangle.name);
System.out.println(myTriangle.color);
}
}
Wyjście:
Wywołano sparametryzowany konstruktor Shape()!
Wywołano sparametryzowany konstruktor Triangle()!
Trójkąt Alfa
Żółty
Szybkie wyzwanie: Przeprojektuj powyższy program używając domyślnego konstruktora, aby sprawdzić swoją wiedzę. Sprawdź też, czym różni się super() od super(arg).
Przykład 3. — Dostęp do przesłoniętych metod klasy nadrzędnej z podklasy
Przykład 3. pokazuje jak uzyskać dostęp do metod nadklasy, które są zdefiniowane również w podklasie. W poniższym programie nadklasa Sound ma zdefiniowaną metodę voice(). Podklasa Drum również posiada metodę o nazwie voice(). Oznacza to, że metoda voice jest przesłonięta przez podklasę. Uruchom poniższy program, aby dowiedzieć się, jak słowo kluczowe super pozwala wywołać metodę klasy nadrzędnej z poziomu podklasy.
public class Sound {
public void voice() {
System.out.println("Odtwarzaj dźwięk!");
}
}
class Drum extends Sound {
public void voice() {
System.out.println("Odtwarzaj perkusję!");
}
public void play() {
// Słowo kluczowe super wywołuje
// metodę voice() nadklasy
super.voice();
voice();
}
public static void main(String[] args) {
Drum myDrum = new Drum();
myDrum.play();
}
}
Wyjście:
Wywołano sparametryzowany konstruktor Shape()!
Wywołano sparametryzowany konstruktor Triangle()!
Trójkąt Alfa
Żółty

GO TO FULL VERSION