Menu
Coddy logo textTech

Podstawowa składnia dziedziczenia (:)

Część sekcji Programowanie obiektowe ścieżki C# w Coddy. Lekcja 19 z 70.

Dziedziczenie pozwala klasie przejąć właściwości i metody innej klasy. Zamiast pisać ten sam kod od nowa, tworzysz klasę bazową (rodzica) ze wspólną funkcjonalnością, a następnie tworzysz klasy pochodne (dzieci), które po niej dziedziczą.

W języku C# używasz symbolu dwukropka :, aby wskazać dziedziczenie:

public class Animal
{
    public string Name { get; set; }
    
    public void Eat()
    {
        Console.WriteLine($"{Name} is eating.");
    }
}

public class Dog : Animal
{
    public void Bark()
    {
        Console.WriteLine($"{Name} says Woof!");
    }
}

Klasa Dog dziedziczy wszystko z klasy Animal. Ma dostęp do właściwości Name i metody Eat() bez konieczności ponownego ich deklarowania, a ponadto dodaje własną metodę Bark():

Dog myDog = new Dog();
myDog.Name = "Buddy";
myDog.Eat();   // Wynik: Buddy je.
myDog.Bark();  // Wynik: Buddy mówi Woof!

C# obsługuje tylko dziedziczenie pojedyncze, co oznacza, że klasa może dziedziczyć tylko po jednej klasie bazowej. Możesz jednak tworzyć łańcuchy dziedziczenia, w których klasa pochodna staje się klasą bazową dla innej klasy. W ten sposób powstaje hierarchia, która odwzorowuje relacje ze świata rzeczywistego, a jednocześnie pomaga utrzymać porządek w kodzie i umożliwia jego ponowne wykorzystanie.

challenge icon

Wyzwanie

Łatwy

Zbudujmy hierarchię pojazdów, która pokazuje, jak dziedziczenie pozwala klasom pochodnym współdzielić funkcjonalność klasy bazowej, a jednocześnie dodawać własne, unikalne zachowania.

Utworzysz trzy pliki, aby uporządkować swój kod:

  • Vehicle.cs: Zdefiniuj klasę Vehicle w przestrzeni nazw Transport. Będzie to klasa bazowa wspólna dla wszystkich pojazdów. Powinna mieć właściwość Brand (string) i właściwość Year (int), a także metodę StartEngine(), która wypisuje "{Brand} engine started."
  • Car.cs: Zdefiniuj klasę Car w przestrzeni nazw Transport, która dziedziczy po klasie Vehicle. Klasa samochodu dodaje własną właściwość NumberOfDoors (int) i metodę Honk(), która wypisuje "{Brand} goes Beep Beep!"
  • Program.cs: W głównym pliku utwórz instancję klasy Car, używając wartości wejściowych. Ustaw jej właściwości (w tym odziedziczone), a następnie pokaż, że samochód może używać zarówno własnych metod, jak i metod odziedziczonych z klasy Vehicle.

Otrzymasz trzy dane wejściowe:

  • Markę
  • Rok
  • Liczbę drzwi

Wypisz informacje o samochodzie i pokaż jego możliwości w tym formacie:

Car: {Brand} ({Year})
Doors: {NumberOfDoors}
{StartEngine output}
{Honk output}

Na przykład, jeśli danymi wejściowymi są Toyota, 2022 i 4, wynik powinien być następujący:

Car: Toyota (2022)
Doors: 4
Toyota engine started.
Toyota goes Beep Beep!

Zwróć uwagę, że obiekt Car może uzyskać dostęp do właściwości Brand i metody StartEngine(), mimo że są one zdefiniowane w klasie Vehicle. Na tym polega siła dziedziczenia — klasa pochodna automatycznie otrzymuje wszystko z klasy bazowej!

Spróbuj swoich sił

using System;
using Transport;

class Program
{
    public static void Main(string[] args)
    {
        // Odczytaj dane wejściowe
        string brand = Console.ReadLine();
        int year = Convert.ToInt32(Console.ReadLine());
        int doors = Convert.ToInt32(Console.ReadLine());
        
        // TODO: Utwórz instancję Car
        
        // TODO: Ustaw właściwości samochodu (Brand, Year, NumberOfDoors)
        
        // TODO: Wypisz informacje o samochodzie w wymaganym formacie:
        // Samochód: {Brand} ({Year})
        // Drzwi: {NumberOfDoors}
        // Następnie wywołaj StartEngine() i Honk()
    }
}
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 C# online