Menu
Coddy logo textTech

Podstawy dziedziczenia (extends)

Część sekcji Programowanie obiektowe ścieżki Java w Coddy. Lekcja 20 z 87.

Dziedziczenie jest jednym z głównych filarów OOP. Umożliwia klasie przejęcie właściwości i metod innej klasy, co sprzyja ponownemu wykorzystaniu kodu i ustanawia naturalną hierarchię między klasami.

W Javie tworzysz relację dziedziczenia za pomocą słowa kluczowego extends. Klasa, która dziedziczy, nazywa się podklasą (lub klasą potomną), a klasa, po której dziedziczy, nazywa się nadklasą (lub klasą nadrzędną).

public class Animal {
    private String name;
    
    public Animal(String name) {
        this.name = name;
    }
    
    public void eat() {
        System.out.println(name + " is eating");
    }
    
    public String getName() {
        return name;
    }
}

public class Dog extends Animal {
    public Dog(String name) {
        super(name);  // Wywołuje konstruktor klasy nadrzędnej
    }
    
    public void bark() {
        System.out.println(getName() + " says woof!");
    }
}

Klasa Dog automatycznie dziedziczy metodę eat() i metodę getName() z klasy Animal. Może również definiować własne metody, takie jak bark():

Dog myDog = new Dog("Buddy");
myDog.eat();   // Odziedziczone: "Buddy is eating"
myDog.bark();  // Własna metoda: "Buddy says woof!"

Pomyśl o dziedziczeniu jako o relacji „jest-czymś”. Pies jest Zwierzęciem, więc ma sens, by Dog rozszerzał Animal. Ta relacja pozwala tworzyć wyspecjalizowane klasy, które współdzielą wspólną funkcjonalność, a jednocześnie dodają własne, unikalne zachowania.

challenge icon

Wyzwanie

Łatwy

Zbudujmy prosty system pojazdów, który pokazuje dziedziczenie w działaniu. Utworzysz klasę nadrzędną przechowującą wspólne właściwości pojazdów oraz klasę podrzędną, która ją rozszerza o specjalne zachowanie.

Rozmieścisz swój kod w trzech plikach:

  • Vehicle.java: Utwórz klasę nadrzędną reprezentującą dowolny pojazd. Powinna zawierać:
    • Prywatne pole dla brand pojazdu (String)
    • Konstruktor, który przyjmuje nazwę marki i przypisuje ją do pola. (Nie trzeba tutaj wywoływać super(), ponieważ Vehicle znajduje się na szczycie hierarchii.)
    • Metodę getBrand(), która zwraca markę
    • Metodę start(), która wyświetla: [brand] is starting
  • Motorcycle.java: Utwórz podklasę rozszerzającą Vehicle. Motocykl jest pojazdem, więc ta relacja „jest-czymś” sprawia, że dziedziczenie jest odpowiednim rozwiązaniem. Twoja klasa Motorcycle powinna:
    • Użyć extends, aby dziedziczyć po Vehicle
    • Mieć konstruktor, który przyjmuje markę i przekazuje ją klasie nadrzędnej za pomocą super(brand)
    • Dodać własną metodę wheelie(), która wyświetla: [brand] is doing a wheelie!
  • Main.java: Połącz wszystko, tworząc obiekt Motorcycle i pokazując zarówno odziedziczone, jak i unikalne zachowania. Otrzymasz jedno wejście: nazwę marki. Wyświetl dwa wiersze, wywołując:
    • Odziedziczoną metodę start()
    • Własną metodę Motorcycle wheelie()

Otrzymasz jedno wejście: nazwę marki (String) swojego motocykla.

Zauważ, że Motorcycle automatycznie ma dostęp do metod start() i getBrand() bez ich ponownego pisania — na tym polega siła dziedziczenia!

Spróbuj swoich sił

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String brand = scanner.nextLine();
        
        // TODO: Utwórz obiekt Motorcycle z podaną marką
        
        // TODO: Wywołaj odziedziczoną metodę start()
        
        // TODO: Wywołaj metodę wheelie()
    }
}
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