Słowo kluczowe super
Część sekcji Programowanie obiektowe ścieżki Java w Coddy. Lekcja 21 z 87.
Słowo kluczowe super umożliwia podklasie odwoływanie się do klasy nadrzędnej. Jest niezbędne, gdy chcesz uzyskać dostęp do składowych klasy nadrzędnej lub jej konstruktorów z poziomu klasy potomnej.
Najczęstszym zastosowaniem super jest wywołanie konstruktora klasy nadrzędnej. Musi to być pierwsza instrukcja w konstruktorze podklasy:
public class Vehicle {
private String brand;
public Vehicle(String brand) {
this.brand = brand;
}
public String getBrand() {
return brand;
}
}
public class Car extends Vehicle {
private int doors;
public Car(String brand, int doors) {
super(brand); // Musi być w pierwszym wierszu
this.doors = doors;
}
}Możesz także użyć super, aby wywołać metody klasy nadrzędnej, co jest szczególnie przydatne, gdy podklasa ma metodę o tej samej nazwie:
public class Animal {
public void makeSound() {
System.out.println("Some sound");
}
}
public class Cat extends Animal {
public void makeSound() {
super.makeSound(); // Wywołuje wersję klasy Animal
System.out.println("Meow!");
}
}Myśl o super jak o przeciwieństwie this. Podczas gdy this odnosi się do bieżącego obiektu, super odnosi się do części tego obiektu należącej do klasy nadrzędnej. To rozróżnienie staje się kluczowe podczas tworzenia hierarchii klas, w których klasy potomne muszą rozszerzać zachowanie klas nadrzędnych, zamiast całkowicie je zastępować.
Wyzwanie
ŁatwyStwórzmy system urządzeń AGD, który pokazuje, jak klasy potomne mogą używać super, aby wywoływać konstruktory klasy nadrzędnej i rozszerzać działanie jej metod.
Utworzysz trzy pliki, aby uporządkować swój kod:
Appliance.java: Utwórz klasę nadrzędną reprezentującą dowolne urządzenie gospodarstwa domowego. Powinna ona zawierać:- Prywatne pole przechowujące
brandurządzenia (String) - Prywatne pole przechowujące
wattage(int) - Konstruktor, który przyjmuje obie wartości i je inicjalizuje
- Metodę
getBrand(), która zwraca markę - Metodę
getWattage(), która zwraca moc - Metodę
getInfo(), która zwraca:[brand] - [wattage]W
- Prywatne pole przechowujące
WashingMachine.java: Utwórz podklasę rozszerzającą Appliance. Pralka ma wszystko to, co urządzenie AGD, a także własne specjalne cechy:- Prywatne pole
capacity(int) reprezentujące ładowność w kg - Konstruktor przyjmujący markę, moc i ładowność — użyj
super(brand, wattage), aby zainicjalizować część odziedziczoną po klasie nadrzędnej, a następnie ustaw ładowność - Metodę
getCapacity(), która zwraca ładowność - Metodę
getInfo(), która wywołuje metodę klasy nadrzędnejgetInfo()za pomocąsuper.getInfo()i rozszerza ją tak, aby zwracała:[parent info], Capacity: [capacity]kg
- Prywatne pole
Main.java: Utwórz obiekt WashingMachine i wyświetl jego pełne informacje. Otrzymasz trzy dane wejściowe: markę (String), moc (int) i ładowność (int). Wypisz wynik wywołaniagetInfo()na obiekcie pralki.
Otrzymasz trzy dane wejściowe: nazwę marki, moc i ładowność.
Zwróć uwagę, że super pełni tu dwie funkcje: wywołuje konstruktor klasy nadrzędnej, aby zainicjalizować odziedziczone pola, oraz wywołuje metodę klasy nadrzędnej, aby rozbudować jej działanie zamiast całkowicie ją zastępować.
Spróbuj swoich sił
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Odczytaj dane wejściowe
String brand = scanner.nextLine();
int wattage = scanner.nextInt();
int capacity = scanner.nextInt();
// TODO: Utwórz obiekt WashingMachine z wartościami wejściowymi
// TODO: Wypisz wynik wywołania getInfo() dla pralki
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe thisMetodyPola (atrybuty)Metoda konstruktoraPrzeciążanie konstruktoraPodsumowanie — prosty kalkulator4Dziedziczenie
Podstawy dziedziczenia (extends)Słowo kluczowe superPrzesłanianie metod (@Override)Łańcuch wywołań konstruktorówKlasa ObjectDziedziczenie jedno- i wielopoziomoweDlaczego Java nie obsługuje wielodziedziczenia klasPodsumowanie – hierarchia pracowników7Metody specjalne i klasa Object
Metoda toString()equals() i hashCode()Metoda clone()compareTo() i ComparableInterfejs ComparatorPodsumowanie — własne sortowanie10Obsługa wyjątków w programowaniu obiektowym
Hierarchia klas wyjątkówWłasne wyjątkiBłędy sprawdzane a niesprawdzaneWzorzec try-with-resourcesPodsumowanie – zweryfikowany użytkownik2Modyfikatory dostępu i enkapsulacja
Przegląd poziomów dostępuMetody pobierające i ustawiająceUkrywanie informacjiSłowo kluczowe finalPodsumowanie — menedżer kont bankowych5Polimorfizm
Podstawy przeciążania metodPrzesłanianie metod (w czasie wykonywania)Rzutowanie w górę i w dółOperator instanceofKlasy i metody abstrakcyjnePowtórka — kalkulator figur8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieAgregacja a kompozycjaKlasy wewnętrzne, zagnieżdżone i anonimoweEnumy i metody enumówRekordy (Java 16+)Klasy zapieczętowane (Java 17+)11Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec BuilderWzorzec ObserverWzorzec Strategy3Właściwości klas i składowe statyczne
Zmienne instancji a zmienne statyczneMetody statyczneBloki statyczneStałe (static final)Powtórka – Counter i Utility6Interfejsy i klasy abstrakcyjne
Wprowadzenie do interfejsówImplementowanie interfejsówImplementacja wielu interfejsówMetody domyślne i statyczne w interfejsieKlasy abstrakcyjne a interfejsyInterfejsy funkcyjnePodsumowanie — system płatnościPoćwicz samodzielnie: Kompilator Java online