Menu
Coddy logo textTech

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ć.

challenge icon

Wyzwanie

Łatwy

Stwó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 brand urzą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
  • 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ędnej getInfo() za pomocą super.getInfo() i rozszerza ją tak, aby zwracała: [parent info], Capacity: [capacity]kg
  • 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łania getInfo() 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
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Java online