CodeGym /Blog Java /Poland /Słowo kluczowe Super w Javie
Autor
John Selawsky
Senior Java Developer and Tutor at LearningTree

Słowo kluczowe Super w Javie

Opublikowano w grupie Poland
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.

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.
  1. Dostęp do pól danych klasy nadrzędnej, gdy podklasa posiada pola o tej samej nazwie.
  2. Wywołanie domyślnych lub sparametryzowanych konstruktorów klasy nadrzędnej w podklasie.
  3. Wywołanie metod klasy nadrzędnej w podklasie, jeżeli klasa podrzędna przesłania metody.
Wyjaśnijmy te trzy przypadki używając przykładów.

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 = "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();
	}
}
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("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);
	}
}
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("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();
	}
}
Wyjście:
Wywołano sparametryzowany konstruktor Shape()! Wywołano sparametryzowany konstruktor Triangle()! Trójkąt Alfa Żółty
Słowo kluczowe Super w Javie - 1

Wnioski

Mamy nadzieję, że kończąc czytanie tego postu będziesz w stanie zrozumieć działanie słowa kluczowego super w Java. Zachęcamy do nauki kodowania przez ćwiczenia. Ponieważ ćwiczenia są główną metodą w nauce budowy logiki. Jeżeli utkniesz, możesz zawsze wrócić do tego postu. Do tego czasu, miłej nauki!
Komentarze (1)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Sławomir Pytlarz Poziom 24, Poland
25 listopada 2022
przykład 3 -> wyjście. Powinno być: Odtwarzaj dźwięk! Odtwarzaj perkusję!